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) {