mirror of
https://github.com/golang/go
synced 2024-09-15 22:20:06 +00:00
text/template: fix bug in pipelined variadics
Simple bug in argument processing: The final arg may be the pipeline value, in which case it gets bound to the fixed argument section. The code got that wrong. Easy to fix. Fixes #8950. LGTM=bradfitz R=golang-codereviews, bradfitz CC=golang-codereviews https://golang.org/cl/161750043
This commit is contained in:
parent
65dde1ed4b
commit
1cd78eedd0
|
@ -546,7 +546,7 @@ func (s *state) evalCall(dot, fun reflect.Value, node parse.Node, name string, a
|
|||
argv := make([]reflect.Value, numIn)
|
||||
// Args must be evaluated. Fixed args first.
|
||||
i := 0
|
||||
for ; i < numFixed; i++ {
|
||||
for ; i < numFixed && i < len(args); i++ {
|
||||
argv[i] = s.evalArg(dot, typ.In(i), args[i])
|
||||
}
|
||||
// Now the ... args.
|
||||
|
|
|
@ -893,6 +893,18 @@ func TestMessageForExecuteEmpty(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestFinalForPrintf(t *testing.T) {
|
||||
tmpl, err := New("").Parse(`{{"x" | printf}}`)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
var b bytes.Buffer
|
||||
err = tmpl.Execute(&b, 0)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
type cmpTest struct {
|
||||
expr string
|
||||
truth string
|
||||
|
|
Loading…
Reference in a new issue