diff --git a/htmlparser/src/CNavDTD.cpp b/htmlparser/src/CNavDTD.cpp
index 944a20ef030..b4958162a29 100644
--- a/htmlparser/src/CNavDTD.cpp
+++ b/htmlparser/src/CNavDTD.cpp
@@ -508,7 +508,7 @@ nsresult CNavDTD::BuildModel(nsIParser* aParser,nsITokenizer* aTokenizer,nsIToke
mParser=(nsParser*)aParser;
mSink=(nsIHTMLContentSink*)aSink;
gRecycler=(CTokenRecycler*)mTokenizer->GetTokenRecycler();
- while(NS_OK==result){
+ while(NS_SUCCEEDED(result)){
CToken* theToken=mTokenizer->PopToken();
if(theToken) {
result=HandleToken(theToken,aParser);
@@ -540,8 +540,9 @@ nsresult CNavDTD::DidBuildModel(nsresult anErrorCode,PRBool aNotifySink,nsIParse
mSink=(nsIHTMLContentSink*)aSink;
if(aNotifySink && mSink){
if((NS_OK==anErrorCode) && (mBodyContext->GetCount()>0)) {
+ eHTMLTags theTarget;
while(mBodyContext->GetCount() > 0) {
- eHTMLTags theTarget = mBodyContext->Last();
+ theTarget = mBodyContext->Last();
if(gHTMLElements[theTarget].HasSpecialProperty(kBadContentWatch))
result = HandleSavedTokensAbove(theTarget);
CloseContainersTo(theTarget,PR_FALSE);
@@ -683,9 +684,18 @@ nsresult CNavDTD::HandleToken(CToken* aToken,nsIParser* aParser){
if(NS_SUCCEEDED(result) || (NS_ERROR_HTMLPARSER_BLOCK==result)) {
gRecycler->RecycleToken(theToken);
}
- else if(NS_ERROR_HTMLPARSER_MISPLACED!=result)
- mTokenizer->PushTokenFront(theToken);
- else result=NS_OK;
+ else if(result==NS_ERROR_HTMLPARSER_STOPPARSING)
+ return result;
+ else return NS_OK;
+ /*************************************************************/
+ // CAUTION: Here we are forgetting to push the ATTRIBUTE Tokens.
+ // So, before you uncomment this part please make sure
+ // that the attribute tokens are also accounted for.
+
+ //else if(NS_ERROR_HTMLPARSER_MISPLACED!=result)
+ // mTokenizer->PushTokenFront(theToken);
+ //else result=NS_OK;
+ /***************************************************************/
if (mDTDDebug) {
//mDTDDebug->Verify(this, mParser, mBodyContext->GetCount(), mBodyContext->mStack, mFilename);
}
@@ -1457,7 +1467,8 @@ nsresult CNavDTD::HandleStartToken(CToken* aToken) {
eHTMLTags theParent=mBodyContext->Last();
if(NS_OK==result) {
- if(NS_OK==WillHandleStartTag(aToken,theChildTag,attrNode)) {
+ result=WillHandleStartTag(aToken,theChildTag,attrNode);
+ if(NS_OK==result) {
if(nsHTMLElement::IsSectionTag(theChildTag)){
switch(theChildTag){
diff --git a/parser/htmlparser/src/CNavDTD.cpp b/parser/htmlparser/src/CNavDTD.cpp
index 944a20ef030..b4958162a29 100644
--- a/parser/htmlparser/src/CNavDTD.cpp
+++ b/parser/htmlparser/src/CNavDTD.cpp
@@ -508,7 +508,7 @@ nsresult CNavDTD::BuildModel(nsIParser* aParser,nsITokenizer* aTokenizer,nsIToke
mParser=(nsParser*)aParser;
mSink=(nsIHTMLContentSink*)aSink;
gRecycler=(CTokenRecycler*)mTokenizer->GetTokenRecycler();
- while(NS_OK==result){
+ while(NS_SUCCEEDED(result)){
CToken* theToken=mTokenizer->PopToken();
if(theToken) {
result=HandleToken(theToken,aParser);
@@ -540,8 +540,9 @@ nsresult CNavDTD::DidBuildModel(nsresult anErrorCode,PRBool aNotifySink,nsIParse
mSink=(nsIHTMLContentSink*)aSink;
if(aNotifySink && mSink){
if((NS_OK==anErrorCode) && (mBodyContext->GetCount()>0)) {
+ eHTMLTags theTarget;
while(mBodyContext->GetCount() > 0) {
- eHTMLTags theTarget = mBodyContext->Last();
+ theTarget = mBodyContext->Last();
if(gHTMLElements[theTarget].HasSpecialProperty(kBadContentWatch))
result = HandleSavedTokensAbove(theTarget);
CloseContainersTo(theTarget,PR_FALSE);
@@ -683,9 +684,18 @@ nsresult CNavDTD::HandleToken(CToken* aToken,nsIParser* aParser){
if(NS_SUCCEEDED(result) || (NS_ERROR_HTMLPARSER_BLOCK==result)) {
gRecycler->RecycleToken(theToken);
}
- else if(NS_ERROR_HTMLPARSER_MISPLACED!=result)
- mTokenizer->PushTokenFront(theToken);
- else result=NS_OK;
+ else if(result==NS_ERROR_HTMLPARSER_STOPPARSING)
+ return result;
+ else return NS_OK;
+ /*************************************************************/
+ // CAUTION: Here we are forgetting to push the ATTRIBUTE Tokens.
+ // So, before you uncomment this part please make sure
+ // that the attribute tokens are also accounted for.
+
+ //else if(NS_ERROR_HTMLPARSER_MISPLACED!=result)
+ // mTokenizer->PushTokenFront(theToken);
+ //else result=NS_OK;
+ /***************************************************************/
if (mDTDDebug) {
//mDTDDebug->Verify(this, mParser, mBodyContext->GetCount(), mBodyContext->mStack, mFilename);
}
@@ -1457,7 +1467,8 @@ nsresult CNavDTD::HandleStartToken(CToken* aToken) {
eHTMLTags theParent=mBodyContext->Last();
if(NS_OK==result) {
- if(NS_OK==WillHandleStartTag(aToken,theChildTag,attrNode)) {
+ result=WillHandleStartTag(aToken,theChildTag,attrNode);
+ if(NS_OK==result) {
if(nsHTMLElement::IsSectionTag(theChildTag)){
switch(theChildTag){