From 29189d4b10ead76a48c3b8f6a16ffbccc8f86f26 Mon Sep 17 00:00:00 2001 From: "harishd%netscape.com" Date: Thu, 8 Jun 2000 21:30:48 +0000 Subject: [PATCH] Fix for: 37247 (nsbeta2+) - XIF DTD / HTMLContentSinkStream shouldn't add end tags for IMG,PARAM,SOUND,INPUT..etc., ( leaf tags ). r=akkana. 41427 (nsbeta2+) - Avoid transient style handling in a head context. 40408 (nsbeta2+) - Check for nsresult in nsFragmentContentSink::AddLeaf(). The HTMLTag array was,erroneously,going out-of-bounds for XMP tag. 40741 (nsbeta2+) - Text, only document, was getting sucked up into 40143 (nsbeta2+) - Use scanner's mIncremental memeber wisely when data is supplied through document.write(); 40552 (nsbeta2+) - Contain default to html documents only. r=rickg 30617 (nsbeta2+) - Misplaced AREA tag should be informed with base target info. r=vidur. git-svn-id: svn://10.0.0.236/trunk@71802 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/htmlparser/src/CNavDTD.cpp | 35 ++++++++++++++----- mozilla/htmlparser/src/nsDTDUtils.cpp | 1 + mozilla/htmlparser/src/nsDTDUtils.h | 1 + .../src/nsHTMLContentSinkStream.cpp | 19 +++++++--- mozilla/htmlparser/src/nsHTMLTags.cpp | 6 ++-- mozilla/htmlparser/src/nsHTMLTags.h | 1 + mozilla/htmlparser/src/nsHTMLTokens.cpp | 17 +++++++-- mozilla/htmlparser/src/nsParser.cpp | 13 +++++-- mozilla/htmlparser/src/nsXIFDTD.cpp | 14 +++++++- mozilla/parser/htmlparser/src/CNavDTD.cpp | 35 ++++++++++++++----- mozilla/parser/htmlparser/src/nsDTDUtils.cpp | 1 + mozilla/parser/htmlparser/src/nsDTDUtils.h | 1 + .../src/nsHTMLContentSinkStream.cpp | 19 +++++++--- mozilla/parser/htmlparser/src/nsHTMLTags.cpp | 6 ++-- mozilla/parser/htmlparser/src/nsHTMLTags.h | 1 + .../parser/htmlparser/src/nsHTMLTokens.cpp | 17 +++++++-- mozilla/parser/htmlparser/src/nsParser.cpp | 13 +++++-- mozilla/parser/htmlparser/src/nsXIFDTD.cpp | 14 +++++++- 18 files changed, 172 insertions(+), 42 deletions(-) diff --git a/mozilla/htmlparser/src/CNavDTD.cpp b/mozilla/htmlparser/src/CNavDTD.cpp index e578c7791d4..944a5c707f6 100644 --- a/mozilla/htmlparser/src/CNavDTD.cpp +++ b/mozilla/htmlparser/src/CNavDTD.cpp @@ -450,16 +450,19 @@ nsresult CNavDTD::BuildModel(nsIParser* aParser,nsITokenizer* aTokenizer,nsIToke if(mSink) { if(!mBodyContext->GetCount()) { - //if the content model is empty, then begin by opening ... - CStartToken *theToken=(CStartToken*)mTokenRecycler->CreateTokenOfType(eToken_start,eHTMLTag_html,NS_ConvertToString("html")); - HandleStartToken(theToken); //this token should get pushed on the context stack, don't recycle it. - + CStartToken* theToken=nsnull; if(ePlainText==mDocType) { - //we do this little trick for text files, in both normal and viewsource mode... - CStartToken *theToken2=(CStartToken*)mTokenRecycler->CreateTokenOfType(eToken_start,eHTMLTag_pre); - HandleStartToken(theToken2); + //we do this little trick for text files, in both normal and viewsource mode... + theToken=(CStartToken*)mTokenRecycler->CreateTokenOfType(eToken_start,eHTMLTag_pre); + if(theToken) { + mTokenizer->PushTokenFront(theToken); + } + } + //if the content model is empty, then begin by opening ... + theToken=(CStartToken*)mTokenRecycler->CreateTokenOfType(eToken_start,eHTMLTag_html,NS_ConvertToString("html")); + if(theToken) { + mTokenizer->PushTokenFront(theToken); //this token should get pushed on the context stack. } - } while(NS_SUCCEEDED(result)){ @@ -524,6 +527,15 @@ nsresult CNavDTD::DidBuildModel(nsresult anErrorCode,PRBool aNotifySink,nsIParse result=HandleToken(theEndToken,mParser); } } + if(!mBodyContext->mHadDocTypeDecl) { + CToken* theDocTypeToken=mTokenRecycler->CreateTokenOfType(eToken_doctypeDecl,eHTMLTag_markupDecl); + if(theDocTypeToken) { + nsAutoString theDocTypeStr; + theDocTypeStr.AssignWithConversion(""); + theDocTypeToken->Reinitialize(eHTMLTag_markupDecl,theDocTypeStr); + result=HandleToken(theDocTypeToken,mParser); + } + } if(result==NS_OK) { eHTMLTags theTarget; @@ -2060,6 +2072,10 @@ nsresult CNavDTD::HandleDocTypeDeclToken(CToken* aToken){ nsresult result=NS_OK; + if(mBodyContext) { + mBodyContext->mHadDocTypeDecl=PR_TRUE; + } + #ifdef RICKG_DEBUG WriteTokenToLog(aToken); #endif @@ -2542,7 +2558,8 @@ eHTMLTags CNavDTD::GetTopNode() const { nsresult CNavDTD::OpenTransientStyles(eHTMLTags aChildTag){ nsresult result=NS_OK; - if(mStyleHandlingEnabled && (eHTMLTag_newline!=aChildTag)) { + // No need to open transient styles in head context - Fix for 41427 + if(mStyleHandlingEnabled && (eHTMLTag_newline!=aChildTag) && !mHasOpenHead) { #ifdef ENABLE_RESIDUALSTYLE diff --git a/mozilla/htmlparser/src/nsDTDUtils.cpp b/mozilla/htmlparser/src/nsDTDUtils.cpp index 3f6872b4519..5e52917679c 100644 --- a/mozilla/htmlparser/src/nsDTDUtils.cpp +++ b/mozilla/htmlparser/src/nsDTDUtils.cpp @@ -371,6 +371,7 @@ nsDTDContext::nsDTDContext() : mStack(), mEntities(0){ mTableStates=0; mHadBody=PR_FALSE; mHadFrameset=PR_TRUE; + mHadDocTypeDecl=PR_FALSE; ResetCounters(); #ifdef NS_DEBUG diff --git a/mozilla/htmlparser/src/nsDTDUtils.h b/mozilla/htmlparser/src/nsDTDUtils.h index de25793c90c..cecbafc6ab0 100644 --- a/mozilla/htmlparser/src/nsDTDUtils.h +++ b/mozilla/htmlparser/src/nsDTDUtils.h @@ -253,6 +253,7 @@ public: PRInt32 mContextTopIndex; PRBool mHadBody; PRBool mHadFrameset; + PRBool mHadDocTypeDecl; static CNodeRecycler* mNodeRecycler; diff --git a/mozilla/htmlparser/src/nsHTMLContentSinkStream.cpp b/mozilla/htmlparser/src/nsHTMLContentSinkStream.cpp index 89043f7b895..7167f5f2ba1 100644 --- a/mozilla/htmlparser/src/nsHTMLContentSinkStream.cpp +++ b/mozilla/htmlparser/src/nsHTMLContentSinkStream.cpp @@ -815,10 +815,21 @@ nsHTMLContentSinkStream::AddLeaf(const nsIParserNode& aNode) if (mHTMLStackPos > 0) tag = mHTMLTagStack[mHTMLStackPos-1]; - if (type == eHTMLTag_br || - type == eHTMLTag_hr || - type == eHTMLTag_meta || - type == eHTMLTag_style) + if (type == eHTMLTag_area || + type == eHTMLTag_base || + type == eHTMLTag_basefont || + type == eHTMLTag_br || + type == eHTMLTag_col || + type == eHTMLTag_frame || + type == eHTMLTag_hr || + type == eHTMLTag_img || + type == eHTMLTag_image || + type == eHTMLTag_input || + type == eHTMLTag_isindex || + type == eHTMLTag_link || + type == eHTMLTag_meta || + type == eHTMLTag_param || + type == eHTMLTag_sound) { AddStartTag(aNode); mHTMLTagStack[--mHTMLStackPos] = eHTMLTag_unknown; diff --git a/mozilla/htmlparser/src/nsHTMLTags.cpp b/mozilla/htmlparser/src/nsHTMLTags.cpp index 14f18ae8433..af3848d568d 100644 --- a/mozilla/htmlparser/src/nsHTMLTags.cpp +++ b/mozilla/htmlparser/src/nsHTMLTags.cpp @@ -138,8 +138,9 @@ const nsCString& nsHTMLTags::GetStringValue(nsHTMLTag aTag) { NS_ASSERTION(gTagArray, "no lookup table, needs addref"); + // Note: NS_HTML_TAG_MAX=113 if ((eHTMLTag_unknown < aTag) && - (aTag < NS_HTML_TAG_MAX) && gTagArray) { + (aTag <= NS_HTML_TAG_MAX) && gTagArray) { return gTagArray[aTag - 1].mStr; } else { @@ -152,8 +153,9 @@ nsHTMLTags::GetStringValue(nsHTMLTag aTag) const char* nsHTMLTags::GetCStringValue(nsHTMLTag aTag) { NS_ASSERTION(gTagArray, "no lookup table, needs addref"); + // Note: NS_HTML_TAG_MAX=113 if ((eHTMLTag_unknown < aTag) && - (aTag < NS_HTML_TAG_MAX) && gTagArray) { + (aTag <= NS_HTML_TAG_MAX) && gTagArray) { return gTagArray[aTag - 1].mStr.mStr; } else { diff --git a/mozilla/htmlparser/src/nsHTMLTags.h b/mozilla/htmlparser/src/nsHTMLTags.h index d98163b9160..2b2d0ba8f88 100644 --- a/mozilla/htmlparser/src/nsHTMLTags.h +++ b/mozilla/htmlparser/src/nsHTMLTags.h @@ -48,6 +48,7 @@ enum nsHTMLTag { }; #undef HTML_TAG +// Currently there are 112 HTML tags. eHTMLTag_text = 114. #define NS_HTML_TAG_MAX PRInt32(eHTMLTag_text - 1) class NS_HTMLPARS nsHTMLTags { diff --git a/mozilla/htmlparser/src/nsHTMLTokens.cpp b/mozilla/htmlparser/src/nsHTMLTokens.cpp index bbfb7d2ca3c..4af9c2604b2 100644 --- a/mozilla/htmlparser/src/nsHTMLTokens.cpp +++ b/mozilla/htmlparser/src/nsHTMLTokens.cpp @@ -2094,10 +2094,21 @@ CDoctypeDeclToken::CDoctypeDeclToken(eHTMLTags aTag) : CHTMLToken(aTag) { * @return */ nsresult CDoctypeDeclToken::Consume(PRUnichar aChar, nsScanner& aScanner,PRInt32 aMode) { - + + nsresult result =NS_OK; + + nsString& theBuffer=aScanner.GetBuffer(); + PRInt32 theCurrOffset=aScanner.GetOffset(); + PRInt32 thePos=(aScanner.GetBuffer()).FindChar(kLessThan,PR_TRUE,theCurrOffset); + mTextValue.AssignWithConversion("-1) { + result=aScanner.ReadUntil(mTextValue,'<',PR_FALSE); + } + else { + result=aScanner.ReadUntil(mTextValue,'>',PR_TRUE); + } return result; } diff --git a/mozilla/htmlparser/src/nsParser.cpp b/mozilla/htmlparser/src/nsParser.cpp index 9cfa2f6093f..f8d69f431c3 100644 --- a/mozilla/htmlparser/src/nsParser.cpp +++ b/mozilla/htmlparser/src/nsParser.cpp @@ -658,7 +658,6 @@ void DetermineParseMode(nsString& aBuffer,nsDTDMode& aParseMode,eParserDocType& } else { if(eDTDMode_unknown==aParseMode) { - aBuffer.InsertWithConversion("\n",0); aDocType=eHTML3Text; aParseMode=eDTDMode_quirks; } @@ -1289,7 +1288,17 @@ aMimeType,PRBool aVerifyEnabled,PRBool aLastCall,nsDTDMode aMode){ pc->mMultipart |= pc->mPrevContext->mMultipart; //if available } - pc->mStreamListenerState = (pc->mMultipart) ? eOnDataAvail : eOnStop; + // start fix bug 40143 + if(pc->mMultipart) { + pc->mStreamListenerState=eOnDataAvail; + if(pc->mScanner) pc->mScanner->SetIncremental(PR_TRUE); + } + else { + pc->mStreamListenerState=eOnStop; + if(pc->mScanner) pc->mScanner->SetIncremental(PR_FALSE); + } + // end fix for 40143 + pc->mContextType=CParserContext::eCTString; pc->SetMimeType(aMimeType); mUnusedInput.Truncate(0); diff --git a/mozilla/htmlparser/src/nsXIFDTD.cpp b/mozilla/htmlparser/src/nsXIFDTD.cpp index 1799aa8cb31..e9df79eefec 100644 --- a/mozilla/htmlparser/src/nsXIFDTD.cpp +++ b/mozilla/htmlparser/src/nsXIFDTD.cpp @@ -944,9 +944,21 @@ PRBool nsXIFDTD::IsHTMLContainer(eHTMLTags aTag) const { PRBool result=PR_TRUE; // by default everything is a container switch(aTag) { - case eHTMLTag_meta: + case eHTMLTag_area: + case eHTMLTag_base: + case eHTMLTag_basefont: case eHTMLTag_br: + case eHTMLTag_col: + case eHTMLTag_frame: case eHTMLTag_hr: + case eHTMLTag_img: + case eHTMLTag_image: + case eHTMLTag_input: + case eHTMLTag_isindex: + case eHTMLTag_link: + case eHTMLTag_meta: + case eHTMLTag_param: + case eHTMLTag_sound: result=PR_FALSE; break; default: diff --git a/mozilla/parser/htmlparser/src/CNavDTD.cpp b/mozilla/parser/htmlparser/src/CNavDTD.cpp index e578c7791d4..944a5c707f6 100644 --- a/mozilla/parser/htmlparser/src/CNavDTD.cpp +++ b/mozilla/parser/htmlparser/src/CNavDTD.cpp @@ -450,16 +450,19 @@ nsresult CNavDTD::BuildModel(nsIParser* aParser,nsITokenizer* aTokenizer,nsIToke if(mSink) { if(!mBodyContext->GetCount()) { - //if the content model is empty, then begin by opening ... - CStartToken *theToken=(CStartToken*)mTokenRecycler->CreateTokenOfType(eToken_start,eHTMLTag_html,NS_ConvertToString("html")); - HandleStartToken(theToken); //this token should get pushed on the context stack, don't recycle it. - + CStartToken* theToken=nsnull; if(ePlainText==mDocType) { - //we do this little trick for text files, in both normal and viewsource mode... - CStartToken *theToken2=(CStartToken*)mTokenRecycler->CreateTokenOfType(eToken_start,eHTMLTag_pre); - HandleStartToken(theToken2); + //we do this little trick for text files, in both normal and viewsource mode... + theToken=(CStartToken*)mTokenRecycler->CreateTokenOfType(eToken_start,eHTMLTag_pre); + if(theToken) { + mTokenizer->PushTokenFront(theToken); + } + } + //if the content model is empty, then begin by opening ... + theToken=(CStartToken*)mTokenRecycler->CreateTokenOfType(eToken_start,eHTMLTag_html,NS_ConvertToString("html")); + if(theToken) { + mTokenizer->PushTokenFront(theToken); //this token should get pushed on the context stack. } - } while(NS_SUCCEEDED(result)){ @@ -524,6 +527,15 @@ nsresult CNavDTD::DidBuildModel(nsresult anErrorCode,PRBool aNotifySink,nsIParse result=HandleToken(theEndToken,mParser); } } + if(!mBodyContext->mHadDocTypeDecl) { + CToken* theDocTypeToken=mTokenRecycler->CreateTokenOfType(eToken_doctypeDecl,eHTMLTag_markupDecl); + if(theDocTypeToken) { + nsAutoString theDocTypeStr; + theDocTypeStr.AssignWithConversion(""); + theDocTypeToken->Reinitialize(eHTMLTag_markupDecl,theDocTypeStr); + result=HandleToken(theDocTypeToken,mParser); + } + } if(result==NS_OK) { eHTMLTags theTarget; @@ -2060,6 +2072,10 @@ nsresult CNavDTD::HandleDocTypeDeclToken(CToken* aToken){ nsresult result=NS_OK; + if(mBodyContext) { + mBodyContext->mHadDocTypeDecl=PR_TRUE; + } + #ifdef RICKG_DEBUG WriteTokenToLog(aToken); #endif @@ -2542,7 +2558,8 @@ eHTMLTags CNavDTD::GetTopNode() const { nsresult CNavDTD::OpenTransientStyles(eHTMLTags aChildTag){ nsresult result=NS_OK; - if(mStyleHandlingEnabled && (eHTMLTag_newline!=aChildTag)) { + // No need to open transient styles in head context - Fix for 41427 + if(mStyleHandlingEnabled && (eHTMLTag_newline!=aChildTag) && !mHasOpenHead) { #ifdef ENABLE_RESIDUALSTYLE diff --git a/mozilla/parser/htmlparser/src/nsDTDUtils.cpp b/mozilla/parser/htmlparser/src/nsDTDUtils.cpp index 3f6872b4519..5e52917679c 100644 --- a/mozilla/parser/htmlparser/src/nsDTDUtils.cpp +++ b/mozilla/parser/htmlparser/src/nsDTDUtils.cpp @@ -371,6 +371,7 @@ nsDTDContext::nsDTDContext() : mStack(), mEntities(0){ mTableStates=0; mHadBody=PR_FALSE; mHadFrameset=PR_TRUE; + mHadDocTypeDecl=PR_FALSE; ResetCounters(); #ifdef NS_DEBUG diff --git a/mozilla/parser/htmlparser/src/nsDTDUtils.h b/mozilla/parser/htmlparser/src/nsDTDUtils.h index de25793c90c..cecbafc6ab0 100644 --- a/mozilla/parser/htmlparser/src/nsDTDUtils.h +++ b/mozilla/parser/htmlparser/src/nsDTDUtils.h @@ -253,6 +253,7 @@ public: PRInt32 mContextTopIndex; PRBool mHadBody; PRBool mHadFrameset; + PRBool mHadDocTypeDecl; static CNodeRecycler* mNodeRecycler; diff --git a/mozilla/parser/htmlparser/src/nsHTMLContentSinkStream.cpp b/mozilla/parser/htmlparser/src/nsHTMLContentSinkStream.cpp index 89043f7b895..7167f5f2ba1 100644 --- a/mozilla/parser/htmlparser/src/nsHTMLContentSinkStream.cpp +++ b/mozilla/parser/htmlparser/src/nsHTMLContentSinkStream.cpp @@ -815,10 +815,21 @@ nsHTMLContentSinkStream::AddLeaf(const nsIParserNode& aNode) if (mHTMLStackPos > 0) tag = mHTMLTagStack[mHTMLStackPos-1]; - if (type == eHTMLTag_br || - type == eHTMLTag_hr || - type == eHTMLTag_meta || - type == eHTMLTag_style) + if (type == eHTMLTag_area || + type == eHTMLTag_base || + type == eHTMLTag_basefont || + type == eHTMLTag_br || + type == eHTMLTag_col || + type == eHTMLTag_frame || + type == eHTMLTag_hr || + type == eHTMLTag_img || + type == eHTMLTag_image || + type == eHTMLTag_input || + type == eHTMLTag_isindex || + type == eHTMLTag_link || + type == eHTMLTag_meta || + type == eHTMLTag_param || + type == eHTMLTag_sound) { AddStartTag(aNode); mHTMLTagStack[--mHTMLStackPos] = eHTMLTag_unknown; diff --git a/mozilla/parser/htmlparser/src/nsHTMLTags.cpp b/mozilla/parser/htmlparser/src/nsHTMLTags.cpp index 14f18ae8433..af3848d568d 100644 --- a/mozilla/parser/htmlparser/src/nsHTMLTags.cpp +++ b/mozilla/parser/htmlparser/src/nsHTMLTags.cpp @@ -138,8 +138,9 @@ const nsCString& nsHTMLTags::GetStringValue(nsHTMLTag aTag) { NS_ASSERTION(gTagArray, "no lookup table, needs addref"); + // Note: NS_HTML_TAG_MAX=113 if ((eHTMLTag_unknown < aTag) && - (aTag < NS_HTML_TAG_MAX) && gTagArray) { + (aTag <= NS_HTML_TAG_MAX) && gTagArray) { return gTagArray[aTag - 1].mStr; } else { @@ -152,8 +153,9 @@ nsHTMLTags::GetStringValue(nsHTMLTag aTag) const char* nsHTMLTags::GetCStringValue(nsHTMLTag aTag) { NS_ASSERTION(gTagArray, "no lookup table, needs addref"); + // Note: NS_HTML_TAG_MAX=113 if ((eHTMLTag_unknown < aTag) && - (aTag < NS_HTML_TAG_MAX) && gTagArray) { + (aTag <= NS_HTML_TAG_MAX) && gTagArray) { return gTagArray[aTag - 1].mStr.mStr; } else { diff --git a/mozilla/parser/htmlparser/src/nsHTMLTags.h b/mozilla/parser/htmlparser/src/nsHTMLTags.h index d98163b9160..2b2d0ba8f88 100644 --- a/mozilla/parser/htmlparser/src/nsHTMLTags.h +++ b/mozilla/parser/htmlparser/src/nsHTMLTags.h @@ -48,6 +48,7 @@ enum nsHTMLTag { }; #undef HTML_TAG +// Currently there are 112 HTML tags. eHTMLTag_text = 114. #define NS_HTML_TAG_MAX PRInt32(eHTMLTag_text - 1) class NS_HTMLPARS nsHTMLTags { diff --git a/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp b/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp index bbfb7d2ca3c..4af9c2604b2 100644 --- a/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp +++ b/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp @@ -2094,10 +2094,21 @@ CDoctypeDeclToken::CDoctypeDeclToken(eHTMLTags aTag) : CHTMLToken(aTag) { * @return */ nsresult CDoctypeDeclToken::Consume(PRUnichar aChar, nsScanner& aScanner,PRInt32 aMode) { - + + nsresult result =NS_OK; + + nsString& theBuffer=aScanner.GetBuffer(); + PRInt32 theCurrOffset=aScanner.GetOffset(); + PRInt32 thePos=(aScanner.GetBuffer()).FindChar(kLessThan,PR_TRUE,theCurrOffset); + mTextValue.AssignWithConversion("-1) { + result=aScanner.ReadUntil(mTextValue,'<',PR_FALSE); + } + else { + result=aScanner.ReadUntil(mTextValue,'>',PR_TRUE); + } return result; } diff --git a/mozilla/parser/htmlparser/src/nsParser.cpp b/mozilla/parser/htmlparser/src/nsParser.cpp index 9cfa2f6093f..f8d69f431c3 100644 --- a/mozilla/parser/htmlparser/src/nsParser.cpp +++ b/mozilla/parser/htmlparser/src/nsParser.cpp @@ -658,7 +658,6 @@ void DetermineParseMode(nsString& aBuffer,nsDTDMode& aParseMode,eParserDocType& } else { if(eDTDMode_unknown==aParseMode) { - aBuffer.InsertWithConversion("\n",0); aDocType=eHTML3Text; aParseMode=eDTDMode_quirks; } @@ -1289,7 +1288,17 @@ aMimeType,PRBool aVerifyEnabled,PRBool aLastCall,nsDTDMode aMode){ pc->mMultipart |= pc->mPrevContext->mMultipart; //if available } - pc->mStreamListenerState = (pc->mMultipart) ? eOnDataAvail : eOnStop; + // start fix bug 40143 + if(pc->mMultipart) { + pc->mStreamListenerState=eOnDataAvail; + if(pc->mScanner) pc->mScanner->SetIncremental(PR_TRUE); + } + else { + pc->mStreamListenerState=eOnStop; + if(pc->mScanner) pc->mScanner->SetIncremental(PR_FALSE); + } + // end fix for 40143 + pc->mContextType=CParserContext::eCTString; pc->SetMimeType(aMimeType); mUnusedInput.Truncate(0); diff --git a/mozilla/parser/htmlparser/src/nsXIFDTD.cpp b/mozilla/parser/htmlparser/src/nsXIFDTD.cpp index 1799aa8cb31..e9df79eefec 100644 --- a/mozilla/parser/htmlparser/src/nsXIFDTD.cpp +++ b/mozilla/parser/htmlparser/src/nsXIFDTD.cpp @@ -944,9 +944,21 @@ PRBool nsXIFDTD::IsHTMLContainer(eHTMLTags aTag) const { PRBool result=PR_TRUE; // by default everything is a container switch(aTag) { - case eHTMLTag_meta: + case eHTMLTag_area: + case eHTMLTag_base: + case eHTMLTag_basefont: case eHTMLTag_br: + case eHTMLTag_col: + case eHTMLTag_frame: case eHTMLTag_hr: + case eHTMLTag_img: + case eHTMLTag_image: + case eHTMLTag_input: + case eHTMLTag_isindex: + case eHTMLTag_link: + case eHTMLTag_meta: + case eHTMLTag_param: + case eHTMLTag_sound: result=PR_FALSE; break; default: