Bug 591330 - Make deep nesting prevention code in the HTML5 parser not crash when there are speculations involved. r=jonas, a=blocking2.0-betaN.
This commit is contained in:
@@ -79,6 +79,8 @@ nsHtml5TreeBuilder::startTokenization(nsHtml5Tokenizer* self)
|
||||
formPointer = nsnull;
|
||||
;
|
||||
headPointer = nsnull;
|
||||
;
|
||||
deepTreeSurrogateParent = nsnull;
|
||||
start(fragment);
|
||||
charBufferLen = 0;
|
||||
charBuffer = jArray<PRUnichar,PRInt32>(1024);
|
||||
@@ -532,6 +534,8 @@ nsHtml5TreeBuilder::endTokenization()
|
||||
formPointer = nsnull;
|
||||
;
|
||||
headPointer = nsnull;
|
||||
;
|
||||
deepTreeSurrogateParent = nsnull;
|
||||
if (stack) {
|
||||
while (currentPtr > -1) {
|
||||
stack[currentPtr]->release();
|
||||
@@ -3811,7 +3815,7 @@ nsHtml5TreeBuilder::newSnapshot()
|
||||
}
|
||||
}
|
||||
;
|
||||
return new nsHtml5StateSnapshot(stackCopy, listCopy, formPointer, headPointer, mode, originalMode, framesetOk, inForeign, needToDropLF, quirks);
|
||||
return new nsHtml5StateSnapshot(stackCopy, listCopy, formPointer, headPointer, deepTreeSurrogateParent, mode, originalMode, framesetOk, inForeign, needToDropLF, quirks);
|
||||
}
|
||||
|
||||
PRBool
|
||||
@@ -3821,7 +3825,7 @@ nsHtml5TreeBuilder::snapshotMatches(nsAHtml5TreeBuilderState* snapshot)
|
||||
PRInt32 stackLen = snapshot->getStackLength();
|
||||
jArray<nsHtml5StackNode*,PRInt32> listCopy = snapshot->getListOfActiveFormattingElements();
|
||||
PRInt32 listLen = snapshot->getListOfActiveFormattingElementsLength();
|
||||
if (stackLen != currentPtr + 1 || listLen != listPtr + 1 || formPointer != snapshot->getFormPointer() || headPointer != snapshot->getHeadPointer() || mode != snapshot->getMode() || originalMode != snapshot->getOriginalMode() || framesetOk != snapshot->isFramesetOk() || inForeign != snapshot->isInForeign() || needToDropLF != snapshot->isNeedToDropLF() || quirks != snapshot->isQuirks()) {
|
||||
if (stackLen != currentPtr + 1 || listLen != listPtr + 1 || formPointer != snapshot->getFormPointer() || headPointer != snapshot->getHeadPointer() || deepTreeSurrogateParent != snapshot->getDeepTreeSurrogateParent() || mode != snapshot->getMode() || originalMode != snapshot->getOriginalMode() || framesetOk != snapshot->isFramesetOk() || inForeign != snapshot->isInForeign() || needToDropLF != snapshot->isNeedToDropLF() || quirks != snapshot->isQuirks()) {
|
||||
return PR_FALSE;
|
||||
}
|
||||
for (PRInt32 i = listLen - 1; i >= 0; i--) {
|
||||
@@ -3893,6 +3897,9 @@ nsHtml5TreeBuilder::loadState(nsAHtml5TreeBuilderState* snapshot, nsHtml5AtomTab
|
||||
;
|
||||
headPointer = snapshot->getHeadPointer();
|
||||
;
|
||||
;
|
||||
deepTreeSurrogateParent = snapshot->getDeepTreeSurrogateParent();
|
||||
;
|
||||
mode = snapshot->getMode();
|
||||
originalMode = snapshot->getOriginalMode();
|
||||
framesetOk = snapshot->isFramesetOk();
|
||||
@@ -3924,6 +3931,12 @@ nsHtml5TreeBuilder::getHeadPointer()
|
||||
return headPointer;
|
||||
}
|
||||
|
||||
nsIContent**
|
||||
nsHtml5TreeBuilder::getDeepTreeSurrogateParent()
|
||||
{
|
||||
return deepTreeSurrogateParent;
|
||||
}
|
||||
|
||||
jArray<nsHtml5StackNode*,PRInt32>
|
||||
nsHtml5TreeBuilder::getListOfActiveFormattingElements()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user