aboutsummaryrefslogtreecommitdiff
path: root/src/text/template/exec_test.go
diff options
context:
space:
mode:
authorAndrew Gerrand <adg@golang.org>2016-05-12 13:55:46 -0700
committerAndrew Gerrand <adg@golang.org>2016-05-12 22:32:30 +0000
commiteb69476c66339ca494f98e65a78d315da99a9c79 (patch)
tree900cb75a8839cff859de0844d86c2401dc87051d /src/text/template/exec_test.go
parent8f48efb31c7cdddeec7d4221174254466b0891dd (diff)
downloadgo-eb69476c66339ca494f98e65a78d315da99a9c79.tar.xz
text/template: detect pathologically recursive template invocations
Return an error message instead of eating memory and eventually triggering a stack overflow. Fixes #15618 Change-Id: I3dcf1d669104690a17847a20fbfeb6d7e39e8751 Reviewed-on: https://go-review.googlesource.com/23091 Reviewed-by: Rob Pike <r@golang.org>
Diffstat (limited to 'src/text/template/exec_test.go')
-rw-r--r--src/text/template/exec_test.go13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/text/template/exec_test.go b/src/text/template/exec_test.go
index bc2aa683ec..3ef065edcf 100644
--- a/src/text/template/exec_test.go
+++ b/src/text/template/exec_test.go
@@ -1297,3 +1297,16 @@ func TestMissingFieldOnNil(t *testing.T) {
t.Errorf("got error %q, want %q", got, want)
}
}
+
+func TestMaxExecDepth(t *testing.T) {
+ tmpl := Must(New("tmpl").Parse(`{{template "tmpl" .}}`))
+ err := tmpl.Execute(ioutil.Discard, nil)
+ got := "<nil>"
+ if err != nil {
+ got = err.Error()
+ }
+ const want = "exceeded maximum template depth"
+ if !strings.Contains(got, want) {
+ t.Errorf("got error %q; want %q", got, want)
+ }
+}