mirror of
https://github.com/golang/go.git
synced 2024-09-29 22:37:06 +00:00
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
This commit is contained in:
parent
71557713b0
commit
260991ad5f
@ -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}}",
|
||||
|
Loading…
Reference in New Issue
Block a user