From 0e19ac99ad63622ec9d90f8d036d3a4f7389fd88 Mon Sep 17 00:00:00 2001 From: "vidur%netscape.com" Date: Mon, 18 Dec 2000 20:44:10 +0000 Subject: [PATCH] Fix for bug 62782. Edge case in scanner caused us to drop characters occasionally. Thanks to jst for identification of the problem. r=harishd, sr=jst git-svn-id: svn://10.0.0.236/trunk@83796 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/htmlparser/src/nsHTMLTokenizer.cpp | 2 +- mozilla/htmlparser/src/nsScanner.cpp | 9 ++++----- mozilla/parser/htmlparser/src/nsHTMLTokenizer.cpp | 2 +- mozilla/parser/htmlparser/src/nsScanner.cpp | 9 ++++----- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/mozilla/htmlparser/src/nsHTMLTokenizer.cpp b/mozilla/htmlparser/src/nsHTMLTokenizer.cpp index 4e82e5744ec..89876110630 100644 --- a/mozilla/htmlparser/src/nsHTMLTokenizer.cpp +++ b/mozilla/htmlparser/src/nsHTMLTokenizer.cpp @@ -539,7 +539,7 @@ nsresult nsHTMLTokenizer::ConsumeTag(PRUnichar aChar,CToken*& aToken,nsScanner& aScanner.GetChar(oldChar); result=ConsumeStartTag(aChar,aToken,aScanner,aFlushTokens); } - else if(kEOF!=aChar) { + else { // We are not dealing with a tag. So, don't consume the original // char and leave the decision to ConsumeText(). result=ConsumeText(aToken,aScanner); diff --git a/mozilla/htmlparser/src/nsScanner.cpp b/mozilla/htmlparser/src/nsScanner.cpp index 0fcd1c29eb6..83cc78f9fac 100644 --- a/mozilla/htmlparser/src/nsScanner.cpp +++ b/mozilla/htmlparser/src/nsScanner.cpp @@ -411,9 +411,7 @@ nsresult nsScanner::Eof() { return kEOF; } - if (mCurrentPosition == mEndPosition) { - theError=FillBuffer(); - } + theError=FillBuffer(); if(NS_OK==theError) { if (0==(PRUint32)mSlidingBuffer->Length()) { @@ -473,10 +471,11 @@ nsresult nsScanner::Peek(PRUnichar& aChar, PRUint32 aOffset) { if(NS_OK == result){ if (aOffset) { - if (mCountRemaining < aOffset) { + while ((NS_OK == result) && (mCountRemaining <= aOffset)) { result = Eof(); } - else { + + if (NS_OK == result) { nsReadingIterator pos = mCurrentPosition; pos.advance(aOffset); aChar=*pos; diff --git a/mozilla/parser/htmlparser/src/nsHTMLTokenizer.cpp b/mozilla/parser/htmlparser/src/nsHTMLTokenizer.cpp index 4e82e5744ec..89876110630 100644 --- a/mozilla/parser/htmlparser/src/nsHTMLTokenizer.cpp +++ b/mozilla/parser/htmlparser/src/nsHTMLTokenizer.cpp @@ -539,7 +539,7 @@ nsresult nsHTMLTokenizer::ConsumeTag(PRUnichar aChar,CToken*& aToken,nsScanner& aScanner.GetChar(oldChar); result=ConsumeStartTag(aChar,aToken,aScanner,aFlushTokens); } - else if(kEOF!=aChar) { + else { // We are not dealing with a tag. So, don't consume the original // char and leave the decision to ConsumeText(). result=ConsumeText(aToken,aScanner); diff --git a/mozilla/parser/htmlparser/src/nsScanner.cpp b/mozilla/parser/htmlparser/src/nsScanner.cpp index 0fcd1c29eb6..83cc78f9fac 100644 --- a/mozilla/parser/htmlparser/src/nsScanner.cpp +++ b/mozilla/parser/htmlparser/src/nsScanner.cpp @@ -411,9 +411,7 @@ nsresult nsScanner::Eof() { return kEOF; } - if (mCurrentPosition == mEndPosition) { - theError=FillBuffer(); - } + theError=FillBuffer(); if(NS_OK==theError) { if (0==(PRUint32)mSlidingBuffer->Length()) { @@ -473,10 +471,11 @@ nsresult nsScanner::Peek(PRUnichar& aChar, PRUint32 aOffset) { if(NS_OK == result){ if (aOffset) { - if (mCountRemaining < aOffset) { + while ((NS_OK == result) && (mCountRemaining <= aOffset)) { result = Eof(); } - else { + + if (NS_OK == result) { nsReadingIterator pos = mCurrentPosition; pos.advance(aOffset); aChar=*pos;