Bug 809956 - Deal with an odd number of ] characters before ]]> in a CDATA section in the HTML parser. r=smaug.

This commit is contained in:
Henri Sivonen
2012-11-12 15:42:23 +02:00
parent 1675f70695
commit 0075e1c889
4 changed files with 163 additions and 31 deletions

View File

@@ -2824,22 +2824,30 @@ public class Tokenizer implements Locator {
}
// WARNING FALLTHRU CASE TRANSITION: DON'T REORDER
case CDATA_RSQB_RSQB:
if (++pos == endPos) {
break stateloop;
}
c = checkChar(buf, pos);
switch (c) {
case '>':
cstart = pos + 1;
state = transition(state, Tokenizer.DATA, reconsume, pos);
continue stateloop;
default:
tokenHandler.characters(Tokenizer.RSQB_RSQB, 0, 2);
cstart = pos;
reconsume = true;
state = transition(state, Tokenizer.CDATA_SECTION, reconsume, pos);
continue stateloop;
cdatarsqbrsqb: for (;;) {
if (++pos == endPos) {
break stateloop;
}
c = checkChar(buf, pos);
switch (c) {
case ']':
// Saw a third ]. Emit one ] (logically the
// first one) and stay in this state to
// remember that the last two characters seen
// have been ]].
tokenHandler.characters(Tokenizer.RSQB_RSQB, 0, 1);
continue;
case '>':
cstart = pos + 1;
state = transition(state, Tokenizer.DATA, reconsume, pos);
continue stateloop;
default:
tokenHandler.characters(Tokenizer.RSQB_RSQB, 0, 2);
cstart = pos;
reconsume = true;
state = transition(state, Tokenizer.CDATA_SECTION, reconsume, pos);
continue stateloop;
}
}
// XXX reorder point
case ATTRIBUTE_VALUE_SINGLE_QUOTED: