Bug 721730. When we have a null aKey, don't do a linear search down to mLastBuffer. r=hsivonen

This commit is contained in:
Boris Zbarsky
2012-04-13 13:46:07 -04:00
parent d427d902e7
commit 26fa357e81

View File

@@ -384,22 +384,14 @@ nsHtml5Parser::Parse(const nsAString& aSourceBuffer,
// prevSearchBuf is the previous buffer before the keyholder or null if // prevSearchBuf is the previous buffer before the keyholder or null if
// there isn't one. // there isn't one.
} else { } else {
// We have a first-level write in the document.open() case. We insert // We have a first-level write in the document.open() case. We insert before
// before mLastBuffer. We need to put a marker there, because otherwise // mLastBuffer, effectively, by making mLastBuffer be a new sentinel object
// additional document.writes from nested event loops would insert in the // and redesignating the previous mLastBuffer as our firstLevelMarker. We
// wrong place. Sigh. // need to put a marker there, because otherwise additional document.writes
firstLevelMarker = new nsHtml5OwningUTF16Buffer((void*)nsnull); // from nested event loops would insert in the wrong place. Sigh.
if (mFirstBuffer == mLastBuffer) { mLastBuffer->next = new nsHtml5OwningUTF16Buffer((void*)nsnull);
firstLevelMarker->next = mLastBuffer; firstLevelMarker = mLastBuffer;
mFirstBuffer = firstLevelMarker; mLastBuffer = mLastBuffer->next;
} else {
prevSearchBuf = mFirstBuffer;
while (prevSearchBuf->next != mLastBuffer) {
prevSearchBuf = prevSearchBuf->next;
}
firstLevelMarker->next = mLastBuffer;
prevSearchBuf->next = firstLevelMarker;
}
} }
nsHtml5DependentUTF16Buffer stackBuffer(aSourceBuffer); nsHtml5DependentUTF16Buffer stackBuffer(aSourceBuffer);