]> Cypherpunks repositories - gostls13.git/commitdiff
text/template: fix nil error on redefinition
authorRob Pike <r@golang.org>
Tue, 17 Jan 2012 21:24:59 +0000 (13:24 -0800)
committerRob Pike <r@golang.org>
Tue, 17 Jan 2012 21:24:59 +0000 (13:24 -0800)
Fixes #2720.

R=golang-dev, dsymonds
CC=golang-dev
https://golang.org/cl/5545072

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

index 3abb51f3383b9d9c8a074108269517331e031117..0f2b75d4c78cc437a6153aef821fc12ab073065c 100644 (file)
@@ -9,6 +9,7 @@ package template
 import (
        "bytes"
        "fmt"
+       "strings"
        "testing"
        "text/template/parse"
 )
@@ -257,3 +258,17 @@ func TestAddParseTree(t *testing.T) {
                t.Errorf("expected %q got %q", "broot", b.String())
        }
 }
+
+func TestRedefinition(t *testing.T) {
+       var tmpl *Template
+       var err error
+       if tmpl, err = New("tmpl1").Parse(`{{define "test"}}foo{{end}}`); err != nil {
+               t.Fatalf("parse 1: %v", err)
+       }
+       if _, err = tmpl.New("tmpl2").Parse(`{{define "test"}}bar{{end}}`); err == nil {
+               t.Fatal("expected error")
+       }
+       if !strings.Contains(err.Error(), "redefinition") {
+               t.Fatalf("expected redefinition error; got %v", err)
+       }
+}
index cbc68081748e46650ca5e3d8cad7ee0c41cc01d0..87e39d3af740f817c1f1a9825f79d2fd88b75a92 100644 (file)
@@ -198,7 +198,7 @@ func (t *Template) associate(new *Template) error {
        name := new.name
        if old := t.tmpl[name]; old != nil {
                oldIsEmpty := parse.IsEmptyTree(old.Root)
-               newIsEmpty := parse.IsEmptyTree(new.Root)
+               newIsEmpty := new.Tree != nil && parse.IsEmptyTree(new.Root)
                if !oldIsEmpty && !newIsEmpty {
                        return fmt.Errorf("template: redefinition of template %q", name)
                }