Commit 1262f6bd authored by Mike Samuel's avatar Mike Samuel

exp/template/html: fix bug, '<' normalization for text nodes that change context

R=nigeltao
CC=golang-dev
https://golang.org/cl/5080042
parent 1f275199
......@@ -551,8 +551,17 @@ func (e *escaper) escapeText(c context, n *parse.TextNode) context {
for i != len(s) {
c1, nread := contextAfterText(c, s[i:])
i1 := i + nread
if c.state == c1.state && (c.state == stateText || c.state == stateRCDATA) {
for j := i; j < i1; j++ {
if c.state == stateText || c.state == stateRCDATA {
end := i1
if c1.state != c.state {
for j := end - 1; j >= i; j-- {
if s[j] == '<' {
end = j
break
}
}
}
for j := i; j < end; j++ {
if s[j] == '<' {
b.Write(s[written:j])
b.WriteString("&lt;")
......
......@@ -366,6 +366,26 @@ func TestEscape(t *testing.T) {
// TODO: Elide comment.
"<b>Hello, <!-- name of world -->&lt;Cincinatti&gt;</b>",
},
{
"HTML comment not first < in text node.",
"<<!-- -->!--",
"&lt;<!-- -->!--",
},
{
"HTML normalization 1",
"a < b",
"a &lt; b",
},
{
"HTML normalization 2",
"a << b",
"a &lt;&lt; b",
},
{
"HTML normalization 3",
"a<<!-- --><!-- -->b",
"a&lt;<!-- --><!-- -->b",
},
{
"Split HTML comment",
"<b>Hello, <!-- name of {{if .T}}city -->{{.C}}{{else}}world -->{{.W}}{{end}}</b>",
......
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