If a tag doesn't have a closing '>', it isn't considered a tag;
it is just ignored and EOF is returned instead.
Pass one additional test in the test suite.
Change tokenizer tests to match correct behavior.
R=nigeltao
CC=golang-dev
https://golang.org/cl/
6454131
PASS "<foo bar=qux/>"
PASS "<p id=\"status\"><noscript><strong>A</strong></noscript><span>B</span></p>"
PASS "<div><sarcasm><div></div></sarcasm></div>"
-FAIL "<html><body><img src=\"\" border=\"0\" alt=\"><div>A</div></body></html>"
+PASS "<html><body><img src=\"\" border=\"0\" alt=\"><div>A</div></body></html>"
PASS "<table><td></tbody>A"
PASS "<table><td></thead>A"
PASS "<table><td></tfoot>A"
// been consumed, where 'a' means anything in [A-Za-z].
func (z *Tokenizer) readStartTag() TokenType {
z.readTag(true)
- if z.err != nil && len(z.attr) == 0 {
+ if z.err != nil {
return ErrorToken
}
// Several tags flag the tokenizer's next token as raw.
}
if 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' {
z.readTag(false)
- z.tt = EndTagToken
+ if z.err != nil {
+ z.tt = ErrorToken
+ } else {
+ z.tt = EndTagToken
+ }
return z.tt
}
z.raw.end--
{
"tag name eof #4",
`<a x`,
- `<a x="">`,
+ ``,
},
// Some malformed tags that are missing a '>'.
{
{
"malformed tag #2",
`<p id`,
- `<p id="">`,
+ ``,
},
{
"malformed tag #3",
`<p id=`,
- `<p id="">`,
+ ``,
},
{
"malformed tag #4",
{
"malformed tag #5",
`<p id=0`,
- `<p id="0">`,
+ ``,
},
{
"malformed tag #6",
{
"malformed tag #7",
`<p id="0</p>`,
- `<p id="0</p>">`,
+ ``,
},
{
"malformed tag #8",
`<p id="0"</p>`,
`<p id="0" <="" p="">`,
},
+ {
+ "malformed tag #9",
+ `<p></p id`,
+ `<p>`,
+ },
// Raw text and RCDATA.
{
"basic raw text",
{
"' ' completes script end tag",
"<SCRIPT>a</SCRipt ",
- "<script>$a$</script>",
+ "<script>$a",
},
{
"'>' completes script end tag",