Commit 260991ad authored by Mike Samuel's avatar Mike Samuel

exp/template/html: do not escape the RHS of assignments

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
parent 71557713
......@@ -153,6 +153,10 @@ func (e *escaper) escape(c context, n parse.Node) context {
// 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 {
......
......@@ -68,10 +68,20 @@ func TestEscape(t *testing.T) {
"<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}}",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment