diff options
| author | Rob Pike <r@golang.org> | 2015-05-13 12:59:33 -0700 |
|---|---|---|
| committer | Rob Pike <r@golang.org> | 2015-05-14 17:47:06 +0000 |
| commit | 92bdbb8a3c8a5a6535d1eb3b2021824662ccaf33 (patch) | |
| tree | 84a24b858225f1626344911fbf3ec71c01f3d6e6 /src | |
| parent | ecfe42cab0c22da35aed6752cafaf0d3c7bb44d4 (diff) | |
| download | go-92bdbb8a3c8a5a6535d1eb3b2021824662ccaf33.tar.xz | |
text/template: need to validate type when an argument is a function call
Missed a case; just need to call validateType.
Fixes #10800.
Change-Id: I81997ca7a9feb1be31c8b47e631b32712d7ffb86
Reviewed-on: https://go-review.googlesource.com/10031
Reviewed-by: Andrew Gerrand <adg@golang.org>
Diffstat (limited to 'src')
| -rw-r--r-- | src/text/template/exec.go | 2 | ||||
| -rw-r--r-- | src/text/template/exec_test.go | 8 |
2 files changed, 9 insertions, 1 deletions
diff --git a/src/text/template/exec.go b/src/text/template/exec.go index e6e1287993..ebafb4b5dc 100644 --- a/src/text/template/exec.go +++ b/src/text/template/exec.go @@ -660,7 +660,7 @@ func (s *state) evalArg(dot reflect.Value, typ reflect.Type, n parse.Node) refle case *parse.PipeNode: return s.validateType(s.evalPipeline(dot, arg), typ) case *parse.IdentifierNode: - return s.evalFunction(dot, arg, arg, nil, zero) + return s.validateType(s.evalFunction(dot, arg, arg, nil, zero), typ) case *parse.ChainNode: return s.validateType(s.evalChainNode(dot, arg, nil, zero), typ) } diff --git a/src/text/template/exec_test.go b/src/text/template/exec_test.go index abce27ff3d..0f1ad62380 100644 --- a/src/text/template/exec_test.go +++ b/src/text/template/exec_test.go @@ -531,6 +531,8 @@ var execTests = []execTest{ {"bug14a", "{{(nil).True}}", "", tVal, false}, {"bug14b", "{{$x := nil}}{{$x.anything}}", "", tVal, false}, {"bug14c", `{{$x := (1.0)}}{{$y := ("hello")}}{{$x.anything}}{{$y.true}}`, "", tVal, false}, + // Didn't call validateType on function results. Issue 10800. + {"bug15", "{{valueString returnInt}}", "", tVal, false}, } func zeroArgs() string { @@ -570,6 +572,11 @@ func valueString(v string) string { return "value is ignored" } +// returnInt returns an int +func returnInt() int { + return 7 +} + func add(args ...int) int { sum := 0 for _, x := range args { @@ -611,6 +618,7 @@ func testExecute(execTests []execTest, template *Template, t *testing.T) { "makemap": makemap, "mapOfThree": mapOfThree, "oneArg": oneArg, + "returnInt": returnInt, "stringer": stringer, "typeOf": typeOf, "valueString": valueString, |
