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

R=nigeltao
CC=golang-dev
https://golang.org/cl/5080042
This commit is contained in:
Mike Samuel 2011-09-20 22:55:14 -07:00
parent 1f27519988
commit 1262f6bde7
2 changed files with 31 additions and 2 deletions

View File

@ -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;")

View File

@ -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>",