diff --git a/mozilla/htmlparser/src/nsHTMLTokenizer.cpp b/mozilla/htmlparser/src/nsHTMLTokenizer.cpp
index eb0ebf59d8a..3c22bf54ea6 100644
--- a/mozilla/htmlparser/src/nsHTMLTokenizer.cpp
+++ b/mozilla/htmlparser/src/nsHTMLTokenizer.cpp
@@ -331,7 +331,7 @@ nsresult nsHTMLTokenizer::ConsumeTag(PRUnichar aChar,CToken*& aToken,nsScanner&
PRUnichar ch;
result=aScanner.Peek(ch);
if(NS_OK==result) {
- if(nsString::IsAlpha(ch)) {
+ if(nsString::IsAlpha(ch)||(kGreaterThan==ch)) {
result=ConsumeEndTag(aChar,aToken,aScanner);
}
else result=ConsumeComment(aChar,aToken,aScanner);
@@ -413,9 +413,19 @@ nsresult nsHTMLTokenizer::ConsumeAttributes(PRUnichar aChar,CStartToken* aToken,
result=aScanner.SkipWhitespace();
if(NS_SUCCEEDED(result)) {
result=aScanner.Peek(aChar);
- if(NS_SUCCEEDED(result) && (aChar==kGreaterThan)) { //you just ate the '>'
- aScanner.GetChar(aChar); //skip the '>'
- done=PR_TRUE;
+ if(NS_SUCCEEDED(result)) {
+ if(aChar==kGreaterThan) { //you just ate the '>'
+ aScanner.GetChar(aChar); //skip the '>'
+ done=PR_TRUE;
+ }
+ else if(aChar==kLessThan) {
+ eHTMLTags theEndTag = (eHTMLTags)aToken->GetTypeID();
+ if(result==NS_OK&&(gHTMLElements[theEndTag].mSkipTarget)){
+ CToken* theEndToken=theRecycler->CreateTokenOfType(eToken_end,theEndTag);
+ AddToken(theEndToken,NS_OK,mTokenDeque,theRecycler);
+ }
+ done=PR_TRUE;
+ }
}//if
}
}//if
diff --git a/mozilla/htmlparser/src/nsHTMLTokens.cpp b/mozilla/htmlparser/src/nsHTMLTokens.cpp
index 2e976824717..f10edc02ac8 100644
--- a/mozilla/htmlparser/src/nsHTMLTokens.cpp
+++ b/mozilla/htmlparser/src/nsHTMLTokens.cpp
@@ -1228,7 +1228,7 @@ nsresult CAttributeToken::Consume(PRUnichar aChar, nsScanner& aScanner) {
else {
//If you're here, handle an unquoted key.
//Don't forget to reduce entities inline!
- static nsAutoString terminals("\b\t\n\r \"=>");
+ static nsAutoString terminals("\b\t\n\r \"<=>");
result=aScanner.ReadUntil(mTextKey,terminals,PR_TRUE,PR_FALSE);
}
diff --git a/mozilla/parser/htmlparser/src/nsHTMLTokenizer.cpp b/mozilla/parser/htmlparser/src/nsHTMLTokenizer.cpp
index eb0ebf59d8a..3c22bf54ea6 100644
--- a/mozilla/parser/htmlparser/src/nsHTMLTokenizer.cpp
+++ b/mozilla/parser/htmlparser/src/nsHTMLTokenizer.cpp
@@ -331,7 +331,7 @@ nsresult nsHTMLTokenizer::ConsumeTag(PRUnichar aChar,CToken*& aToken,nsScanner&
PRUnichar ch;
result=aScanner.Peek(ch);
if(NS_OK==result) {
- if(nsString::IsAlpha(ch)) {
+ if(nsString::IsAlpha(ch)||(kGreaterThan==ch)) {
result=ConsumeEndTag(aChar,aToken,aScanner);
}
else result=ConsumeComment(aChar,aToken,aScanner);
@@ -413,9 +413,19 @@ nsresult nsHTMLTokenizer::ConsumeAttributes(PRUnichar aChar,CStartToken* aToken,
result=aScanner.SkipWhitespace();
if(NS_SUCCEEDED(result)) {
result=aScanner.Peek(aChar);
- if(NS_SUCCEEDED(result) && (aChar==kGreaterThan)) { //you just ate the '>'
- aScanner.GetChar(aChar); //skip the '>'
- done=PR_TRUE;
+ if(NS_SUCCEEDED(result)) {
+ if(aChar==kGreaterThan) { //you just ate the '>'
+ aScanner.GetChar(aChar); //skip the '>'
+ done=PR_TRUE;
+ }
+ else if(aChar==kLessThan) {
+ eHTMLTags theEndTag = (eHTMLTags)aToken->GetTypeID();
+ if(result==NS_OK&&(gHTMLElements[theEndTag].mSkipTarget)){
+ CToken* theEndToken=theRecycler->CreateTokenOfType(eToken_end,theEndTag);
+ AddToken(theEndToken,NS_OK,mTokenDeque,theRecycler);
+ }
+ done=PR_TRUE;
+ }
}//if
}
}//if
diff --git a/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp b/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp
index 2e976824717..f10edc02ac8 100644
--- a/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp
+++ b/mozilla/parser/htmlparser/src/nsHTMLTokens.cpp
@@ -1228,7 +1228,7 @@ nsresult CAttributeToken::Consume(PRUnichar aChar, nsScanner& aScanner) {
else {
//If you're here, handle an unquoted key.
//Don't forget to reduce entities inline!
- static nsAutoString terminals("\b\t\n\r \"=>");
+ static nsAutoString terminals("\b\t\n\r \"<=>");
result=aScanner.ReadUntil(mTextKey,terminals,PR_TRUE,PR_FALSE);
}