]> Cypherpunks repositories - gostls13.git/commitdiff
text/template: need to validate type when an argument is a function call
authorRob Pike <r@golang.org>
Wed, 13 May 2015 19:59:33 +0000 (12:59 -0700)
committerRob Pike <r@golang.org>
Thu, 14 May 2015 17:47:06 +0000 (17:47 +0000)
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>
src/text/template/exec.go
src/text/template/exec_test.go

index e6e1287993bff1c07dc1175cc001581103e21a09..ebafb4b5dc94d03a265794ddc84343c78ce9c2a1 100644 (file)
@@ -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)
        }
index abce27ff3dcbd9da2e55eb9c2188217329501b30..0f1ad62380af4c911a0d9547584fb4851afb1d98 100644 (file)
@@ -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,