aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/text/template
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2012-01-17 13:24:59 -0800
committerRob Pike <r@golang.org>2012-01-17 13:24:59 -0800
commit4985ee3dcb76bd0f9d8aba800e97ba29b535997f (patch)
treec916b628427fb0910b6f46bff495c0815c0baac0 /src/pkg/text/template
parentf4ad8c1c5b8ec6c271a206a3ec74d57b03b7e0e6 (diff)
downloadgo-4985ee3dcb76bd0f9d8aba800e97ba29b535997f.tar.xz
text/template: fix nil error on redefinition
Fixes #2720. R=golang-dev, dsymonds CC=golang-dev https://golang.org/cl/5545072
Diffstat (limited to 'src/pkg/text/template')
-rw-r--r--src/pkg/text/template/multi_test.go15
-rw-r--r--src/pkg/text/template/template.go2
2 files changed, 16 insertions, 1 deletions
diff --git a/src/pkg/text/template/multi_test.go b/src/pkg/text/template/multi_test.go
index 3abb51f338..0f2b75d4c7 100644
--- a/src/pkg/text/template/multi_test.go
+++ b/src/pkg/text/template/multi_test.go
@@ -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)
+ }
+}
diff --git a/src/pkg/text/template/template.go b/src/pkg/text/template/template.go
index cbc6808174..87e39d3af7 100644
--- a/src/pkg/text/template/template.go
+++ b/src/pkg/text/template/template.go
@@ -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)
}