diff --git a/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp b/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp index 6fee37558fc..cbe2f620dee 100644 --- a/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp +++ b/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp @@ -1036,20 +1036,22 @@ nsresult CCDATASectionToken::Consume(PRUnichar aChar, nsScanner& aScanner,PRInt3 mTextValue.Append(aChar); ++mNewlineCount; } - else if (kRightSquareBracket == aChar) { + else if (kRightSquareBracket == aChar) { + PRBool canClose = PR_FALSE; result=aScanner.GetChar(aChar); //strip off the ] mTextValue.Append(aChar); result=aScanner.Peek(aChar); //then see what's next. if((NS_OK==result) && (kRightSquareBracket==aChar)) { result=aScanner.GetChar(aChar); //strip off the second ] mTextValue.Append(aChar); + canClose = PR_TRUE; } // The goal here is to not lose data from the page when encountering // markup like: . This means that in normal parsing, we // allow ']' to end the marked section and just drop everything between // it an the '>'. In view-source mode, we cannot drop things on the // floor like that. In fact, to make view-source of XML with script in - // CDATA sections at all bearable, we need to somewhat enforce the ']>' + // CDATA sections at all bearable, we need to somewhat enforce the ']]>' // terminator for marked sections. So make the tokenization somewhat // different when in view-source _and_ dealing with a CDATA section. PRBool inCDATA = (aFlag & NS_IPARSER_FLAG_VIEW_SOURCE) && @@ -1061,7 +1063,7 @@ nsresult CCDATASectionToken::Consume(PRUnichar aChar, nsScanner& aScanner,PRInt3 result=aScanner.ReadUntil(dummy,kGreaterThan,PR_FALSE); } if (NS_OK==result && - (!inCDATA || kGreaterThan == aChar)) { + (!inCDATA || (canClose && kGreaterThan == aChar))) { result=aScanner.GetChar(aChar); //strip off the > done=PR_TRUE; }