diff --git a/mozilla/htmlparser/src/nsHTMLTokens.cpp b/mozilla/htmlparser/src/nsHTMLTokens.cpp
index f6a5aa1aff7..bb5ad096af3 100644
--- a/mozilla/htmlparser/src/nsHTMLTokens.cpp
+++ b/mozilla/htmlparser/src/nsHTMLTokens.cpp
@@ -2342,21 +2342,43 @@ CDoctypeDeclToken::CDoctypeDeclToken(const nsAReadableString& aString,eHTMLTags
*/
nsresult CDoctypeDeclToken::Consume(PRUnichar aChar, nsScanner& aScanner,PRInt32 aFlag) {
- nsresult result =NS_OK;
-
- nsReadingIterator theCurrOffset, endPos;
- aScanner.CurrentPosition(theCurrOffset);
- aScanner.EndReading(endPos);
- FindCharInReadable(PRUnichar(kLessThan), theCurrOffset, endPos);
+ static const PRUnichar terminalChars[] =
+ { PRUnichar('>'), PRUnichar('<'),
+ PRUnichar(0)
+ };
- mTextValue.AssignWithConversion(" start, end;
+
+ aScanner.CurrentPosition(start);
+ aScanner.EndReading(end);
+
+ nsresult result=aScanner.ReadUntil(start, end, terminals,PR_FALSE);
+
+ if (NS_SUCCEEDED(result)) {
+ PRUnichar ch;
+ aScanner.Peek(ch);
+ if (ch == kGreaterThan) {
+ // Include '>' but not '<' since '<'
+ // could belong to another tag.
+ aScanner.GetChar(ch);
+ end.advance(1);
+ }
}
- else {
- result=aScanner.ReadUntil(mTextValue,'>',PR_TRUE);
+ else if (!aScanner.IsIncremental()) {
+ // We have reached the document end but haven't
+ // found either a '<' or a '>'. Therefore use
+ // whatever we have.
+ result = NS_OK;
}
+
+ if (NS_SUCCEEDED(result)) {
+ start.advance(-2); // Make sure to consume theCurrOffset, endPos;
- aScanner.CurrentPosition(theCurrOffset);
- aScanner.EndReading(endPos);
- FindCharInReadable(PRUnichar(kLessThan), theCurrOffset, endPos);
+ static const PRUnichar terminalChars[] =
+ { PRUnichar('>'), PRUnichar('<'),
+ PRUnichar(0)
+ };
- mTextValue.AssignWithConversion(" start, end;
+
+ aScanner.CurrentPosition(start);
+ aScanner.EndReading(end);
+
+ nsresult result=aScanner.ReadUntil(start, end, terminals,PR_FALSE);
+
+ if (NS_SUCCEEDED(result)) {
+ PRUnichar ch;
+ aScanner.Peek(ch);
+ if (ch == kGreaterThan) {
+ // Include '>' but not '<' since '<'
+ // could belong to another tag.
+ aScanner.GetChar(ch);
+ end.advance(1);
+ }
}
- else {
- result=aScanner.ReadUntil(mTextValue,'>',PR_TRUE);
+ else if (!aScanner.IsIncremental()) {
+ // We have reached the document end but haven't
+ // found either a '<' or a '>'. Therefore use
+ // whatever we have.
+ result = NS_OK;
}
+
+ if (NS_SUCCEEDED(result)) {
+ start.advance(-2); // Make sure to consume