diff --git a/parser/htmlparser/src/nsHTMLTokens.cpp b/parser/htmlparser/src/nsHTMLTokens.cpp
index 359f1784b866..b36f79914b4c 100644
--- a/parser/htmlparser/src/nsHTMLTokens.cpp
+++ b/parser/htmlparser/src/nsHTMLTokens.cpp
@@ -815,7 +815,7 @@ nsresult CTextToken::ConsumeParsedCharacterData(PRUnichar aChar,
};
static const nsReadEndCondition theEndCondition(terminalChars);
- nsScannerIterator currPos,endPos,altEndPos;
+ nsScannerIterator currPos, endPos, altEndPos;
PRUint32 truncPos = 0;
aScanner.CurrentPosition(currPos);
aScanner.EndReading(endPos);
@@ -833,7 +833,9 @@ nsresult CTextToken::ConsumeParsedCharacterData(PRUnichar aChar,
nsresult result = NS_OK;
- while (currPos != endPos) {
+ // Note that if we're already at the end of the document, the ConsumeUntil
+ // will fail, and we'll do the right thing.
+ do {
result = ConsumeUntil(theContent, mNewlineCount, aScanner,
theEndCondition, PR_TRUE, aFlag);
@@ -915,7 +917,7 @@ nsresult CTextToken::ConsumeParsedCharacterData(PRUnichar aChar,
// We did not find the terminal string yet so
// include the character that stopped consumption.
theContent.writable().Append(ch);
- }
+ } while (currPos != endPos);
return result;
}