From: Brad Fitzpatrick Date: Tue, 13 Mar 2012 23:55:43 +0000 (-0700) Subject: html/template: fix panic on Clone X-Git-Tag: weekly.2012-03-22~110 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=5f32c8b88bfe5f6e2ba32bb444dbda88ec741024;p=gostls13.git html/template: fix panic on Clone Fixes #3281 R=golang-dev, r CC=golang-dev https://golang.org/cl/5819044 --- diff --git a/src/pkg/html/template/clone_test.go b/src/pkg/html/template/clone_test.go index c612775d4f..5907ff2c3e 100644 --- a/src/pkg/html/template/clone_test.go +++ b/src/pkg/html/template/clone_test.go @@ -113,3 +113,10 @@ func TestClone(t *testing.T) { t.Errorf("t3: got %q want %q", got, want) } } + +// This used to crash; http://golang.org/issue/3281 +func TestCloneCrash(t *testing.T) { + t1 := New("all") + Must(t1.New("t1").Parse(`{{define "foo"}}foo{{end}}`)) + t1.Clone() +} diff --git a/src/pkg/html/template/template.go b/src/pkg/html/template/template.go index b0bae7a54f..95a3027c46 100644 --- a/src/pkg/html/template/template.go +++ b/src/pkg/html/template/template.go @@ -160,9 +160,11 @@ func (t *Template) Clone() (*Template, error) { if src == nil || src.escaped { return nil, fmt.Errorf("html/template: cannot Clone %q after it has executed", t.Name()) } - x.Tree = &parse.Tree{ - Name: x.Tree.Name, - Root: x.Tree.Root.CopyList(), + if x.Tree != nil { + x.Tree = &parse.Tree{ + Name: x.Tree.Name, + Root: x.Tree.Root.CopyList(), + } } ret.set[name] = &Template{ false,