In
{{$x := . | foo}}
{{$x}}
the first action is a variable assignment that contributes
nothing to the output while the first is a use that needs
to be escaped.
This CL fixes escapeAction to distinguish assignments from
interpolations and to only modify interpolations.
R=nigeltao, r
CC=golang-dev
https://golang.org/cl/
5143048
// escapeAction escapes an action template node.
func (e *escaper) escapeAction(c context, n *parse.ActionNode) context {
+ if len(n.Pipe.Decl) != 0 {
+ // A local variable assignment, not an interpolation.
+ return c
+ }
c = nudge(c)
s := make([]string, 0, 3)
switch c.state {
"<Goodbye>!",
},
{
- "overescaping",
+ "overescaping1",
"Hello, {{.C | html}}!",
"Hello, <Cincinatti>!",
},
+ {
+ "overescaping2",
+ "Hello, {{html .C}}!",
+ "Hello, <Cincinatti>!",
+ },
+ {
+ "overescaping3",
+ "{{with .C}}{{$msg := .}}Hello, {{$msg}}!{{end}}",
+ "Hello, <Cincinatti>!",
+ },
{
"assignment",
"{{if $x := .H}}{{$x}}{{end}}",