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:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user