]> Cypherpunks repositories - gostls13.git/commitdiff
text/template: don't panic when using AddParseTree with an unparsed template
authorJosh Bleecher Snyder <josharian@gmail.com>
Tue, 31 Dec 2013 01:17:19 +0000 (17:17 -0800)
committerRob Pike <r@golang.org>
Tue, 31 Dec 2013 01:17:19 +0000 (17:17 -0800)
Fixes #7032.

R=golang-codereviews, r
CC=golang-codereviews
https://golang.org/cl/43960045

src/pkg/text/template/multi_test.go
src/pkg/text/template/template.go

index 1f6ed5d8e22d4b6ca304f7000effa7b81a9bc1ff..e4e804880a4e88050cd31549c70602e560cc868b 100644 (file)
@@ -259,6 +259,18 @@ func TestAddParseTree(t *testing.T) {
        }
 }
 
+// Issue 7032
+func TestAddParseTreeToUnparsedTemplate(t *testing.T) {
+       master := "{{define \"master\"}}{{end}}"
+       tmpl := New("master")
+       tree, err := parse.Parse("master", master, "", "", nil)
+       if err != nil {
+               t.Fatalf("unexpected parse err: %v", err)
+       }
+       masterTree := tree["master"]
+       tmpl.AddParseTree("master", masterTree) // used to panic
+}
+
 func TestRedefinition(t *testing.T) {
        var tmpl *Template
        var err error
index a2b9062ad1442006d5cbb5c2bffed945fc2c4160..249d0cbfb9038d1c48757a7da8bdf4afecf07bcd 100644 (file)
@@ -105,7 +105,7 @@ func (t *Template) copy(c *common) *Template {
 // AddParseTree creates a new template with the name and parse tree
 // and associates it with t.
 func (t *Template) AddParseTree(name string, tree *parse.Tree) (*Template, error) {
-       if t.tmpl[name] != nil {
+       if t.common != nil && t.tmpl[name] != nil {
                return nil, fmt.Errorf("template: redefinition of template %q", name)
        }
        nt := t.New(name)