diff --git a/mozilla/htmlparser/src/CNavDTD.cpp b/mozilla/htmlparser/src/CNavDTD.cpp index f6bee548bfa..a90f4f45220 100644 --- a/mozilla/htmlparser/src/CNavDTD.cpp +++ b/mozilla/htmlparser/src/CNavDTD.cpp @@ -1205,7 +1205,22 @@ nsresult CNavDTD::HandleEntityToken(CToken* aToken) { nsresult CNavDTD::HandleCommentToken(CToken* aToken) { NS_PRECONDITION(0!=aToken,kNullToken); nsCParserNode aNode((CHTMLToken*)aToken,mLineNumber); - nsresult result=(mSink) ? mSink->AddComment(aNode) : NS_OK; + + // You may find this hard to beleive, but this has to be here + // so that the TBODY doesnt die when it sees a comment. + // This case occurs on WWW.CREAF.COM + eHTMLTags theTag=mBodyContext->mTags.Last(); + nsresult result=NS_OK; + + switch(theTag) { + case eHTMLTag_table: + case eHTMLTag_tr: + case eHTMLTag_tbody: + case eHTMLTag_td: + break; + default: + result=(mSink) ? mSink->AddComment(aNode) : NS_OK; + } return result; } diff --git a/mozilla/htmlparser/src/nsHTMLTokens.cpp b/mozilla/htmlparser/src/nsHTMLTokens.cpp index 9f4cb3563ef..4049728c96d 100644 --- a/mozilla/htmlparser/src/nsHTMLTokens.cpp +++ b/mozilla/htmlparser/src/nsHTMLTokens.cpp @@ -698,10 +698,11 @@ nsresult ConsumeComment(PRUnichar aChar, nsScanner& aScanner,nsString& aString) if(kMinus==aChar) { //in this case, we're reading a long-form comment <-- xxx --> aString+=aChar; - nsAutoString temp(""); PRBool done=PR_FALSE; PRInt32 findpos=kNotFound; - result=aScanner.ReadWhile(temp,gMinus,PR_TRUE,PR_TRUE); //get all available '---' + result=aScanner.ReadWhile(aString,gMinus,PR_TRUE,PR_TRUE); //get all available '---' + findpos=aString.RFind("->"); + nsAutoString temp(""); while((kNotFound==findpos) && (NS_OK==result)) { result=aScanner.ReadUntil(temp,kMinus,PR_TRUE); if(NS_OK==result) { diff --git a/mozilla/parser/htmlparser/src/CNavDTD.cpp b/mozilla/parser/htmlparser/src/CNavDTD.cpp index f6bee548bfa..a90f4f45220 100644 --- a/mozilla/parser/htmlparser/src/CNavDTD.cpp +++ b/mozilla/parser/htmlparser/src/CNavDTD.cpp @@ -1205,7 +1205,22 @@ nsresult CNavDTD::HandleEntityToken(CToken* aToken) { nsresult CNavDTD::HandleCommentToken(CToken* aToken) { NS_PRECONDITION(0!=aToken,kNullToken); nsCParserNode aNode((CHTMLToken*)aToken,mLineNumber); - nsresult result=(mSink) ? mSink->AddComment(aNode) : NS_OK; + + // You may find this hard to beleive, but this has to be here + // so that the TBODY doesnt die when it sees a comment. + // This case occurs on WWW.CREAF.COM + eHTMLTags theTag=mBodyContext->mTags.Last(); + nsresult result=NS_OK; + + switch(theTag) { + case eHTMLTag_table: + case eHTMLTag_tr: + case eHTMLTag_tbody: + case eHTMLTag_td: + break; + default: + result=(mSink) ? mSink->AddComment(aNode) : NS_OK; + } return result; } diff --git a/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp b/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp index 9f4cb3563ef..4049728c96d 100644 --- a/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp +++ b/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp @@ -698,10 +698,11 @@ nsresult ConsumeComment(PRUnichar aChar, nsScanner& aScanner,nsString& aString) if(kMinus==aChar) { //in this case, we're reading a long-form comment <-- xxx --> aString+=aChar; - nsAutoString temp(""); PRBool done=PR_FALSE; PRInt32 findpos=kNotFound; - result=aScanner.ReadWhile(temp,gMinus,PR_TRUE,PR_TRUE); //get all available '---' + result=aScanner.ReadWhile(aString,gMinus,PR_TRUE,PR_TRUE); //get all available '---' + findpos=aString.RFind("->"); + nsAutoString temp(""); while((kNotFound==findpos) && (NS_OK==result)) { result=aScanner.ReadUntil(temp,kMinus,PR_TRUE); if(NS_OK==result) {