diff options
author | bep <bjorn.erik.pedersen@gmail.com> | 2015-04-30 11:51:01 +0300 |
---|---|---|
committer | bep <bjorn.erik.pedersen@gmail.com> | 2015-04-30 11:51:10 +0300 |
commit | be3b8a132ba72aa3a797101f942e555610553f72 (patch) | |
tree | 11a94427c77ab931f8907c3ff40dde32c811de6b /tpl/template_test.go | |
parent | beacfcf865ed8c38e8f17f4b5cb158a315d42174 (diff) |
tpl: avoid panic on too few args to apply
Fixes #1089
Diffstat (limited to 'tpl/template_test.go')
-rw-r--r-- | tpl/template_test.go | 73 |
1 files changed, 72 insertions, 1 deletions
diff --git a/tpl/template_test.go b/tpl/template_test.go index 0c440966b..e3ce56a33 100644 --- a/tpl/template_test.go +++ b/tpl/template_test.go @@ -1,3 +1,74 @@ package tpl -// TODO(bep) test it +import ( + "errors" + "io/ioutil" + "testing" +) + +// Test for bugs discovered by https://github.com/dvyukov/go-fuzz +func TestTplGoFuzzReports(t *testing.T) { + for i, this := range []struct { + data string + expectErr int + }{{"{{apply .C \"first\" }}", 2}} { + templ := New() + + d := &Data{ + A: 42, + B: "foo", + C: []int{1, 2, 3}, + D: map[int]string{1: "foo", 2: "bar"}, + E: Data1{42, "foo"}, + } + + err := templ.AddTemplate("fuzz", this.data) + + if err != nil && this.expectErr == 0 { + t.Fatalf("Test %d errored: %s", i, err) + } else if err == nil && this.expectErr == 1 { + t.Fatalf("#1 Test %d should have errored", i) + } + + err = templ.ExecuteTemplate(ioutil.Discard, "fuzz", d) + + if err != nil && this.expectErr == 0 { + t.Fatalf("Test %d errored: %s", i, err) + } else if err == nil && this.expectErr == 2 { + t.Fatalf("#2 Test %d should have errored", i) + } + } +} + +type Data struct { + A int + B string + C []int + D map[int]string + E Data1 +} + +type Data1 struct { + A int + B string +} + +func (Data1) Q() string { + return "foo" +} + +func (Data1) W() (string, error) { + return "foo", nil +} + +func (Data1) E() (string, error) { + return "foo", errors.New("Data.E error") +} + +func (Data1) R(v int) (string, error) { + return "foo", nil +} + +func (Data1) T(s string) (string, error) { + return s, nil +} |