зеркало из https://github.com/mozilla/gecko-dev.git
Checking in fix for annoying asserts on startup caused by a doctype token problem in the parser that was introduced yesterday, casting char * to PRUnichar * just aint a good idea (although that was only part of the problem). Fix done mostly by heikki@netscape.com, r=heikki, harishd, sr=me.
This commit is contained in:
Родитель
3b54f4a99c
Коммит
1bd04c173d
|
@ -1228,7 +1228,7 @@ nsXMLContentSink::AddDocTypeDecl(const nsIParserNode& aNode, PRInt32 aMode)
|
|||
nsAutoString docTypeStr(aNode.GetText());
|
||||
nsAutoString str, name, publicId, systemId;
|
||||
|
||||
if (docTypeStr.EqualsWithConversion("<!DOCTYPE", PR_FALSE, 9)) {
|
||||
if (docTypeStr.EqualsWithConversion("<!DOCTYPE", PR_FALSE, 10)) {
|
||||
docTypeStr.Right(str, docTypeStr.Length()-9);
|
||||
}
|
||||
|
||||
|
|
|
@ -1246,7 +1246,7 @@ CToken* nsTokenAllocator::CreateTokenOfType(eHTMLTokenTypes aType,eHTMLTags aTag
|
|||
case eToken_instruction: result=new(mArenaPool) CInstructionToken(aString); break;
|
||||
case eToken_cdatasection: result=new(mArenaPool) CCDATASectionToken(aString); break;
|
||||
case eToken_error: result=new(mArenaPool) CErrorToken(); break;
|
||||
case eToken_doctypeDecl: result=new(mArenaPool) CDoctypeDeclToken(); break;
|
||||
case eToken_doctypeDecl: result=new(mArenaPool) CDoctypeDeclToken(aString); break;
|
||||
default:
|
||||
NS_ASSERTION(PR_FALSE, "nsDTDUtils::CreateTokenOfType: illegal token type");
|
||||
break;
|
||||
|
|
|
@ -65,7 +65,6 @@ static NS_DEFINE_IID(kITokenizerIID, NS_ITOKENIZER_IID);
|
|||
static NS_DEFINE_IID(kHTMLTokenizerIID, NS_HTMLTOKENIZER_IID);
|
||||
static NS_DEFINE_IID(kClassIID, NS_EXPATTOKENIZER_IID);
|
||||
|
||||
static const char* kDocTypeDeclPrefix = "<!DOCTYPE";
|
||||
static const char* kChromeProtocol = "chrome";
|
||||
static const char* kDTDDirectory = "dtd/";
|
||||
static const char kHTMLNameSpaceURI[] = "http://www.w3.org/1999/xhtml";
|
||||
|
@ -904,7 +903,7 @@ void nsExpatTokenizer::HandleStartDoctypeDecl(void *userData,
|
|||
{
|
||||
XMLParserState* state = (XMLParserState*) userData;
|
||||
state->indoctype = PR_TRUE;
|
||||
state->doctypeText.Assign((PRUnichar*)kDocTypeDeclPrefix);
|
||||
state->doctypeText.Assign(NS_LITERAL_STRING("<!DOCTYPE "));
|
||||
}
|
||||
|
||||
void nsExpatTokenizer::HandleEndDoctypeDecl(void *userData)
|
||||
|
|
|
@ -2091,7 +2091,12 @@ const nsAReadableString& CErrorToken::GetStringValue(void)
|
|||
|
||||
// Doctype decl token
|
||||
|
||||
CDoctypeDeclToken::CDoctypeDeclToken(eHTMLTags aTag) : CHTMLToken(aTag) {
|
||||
CDoctypeDeclToken::CDoctypeDeclToken(eHTMLTags aTag)
|
||||
: CHTMLToken(aTag) {
|
||||
}
|
||||
|
||||
CDoctypeDeclToken::CDoctypeDeclToken(const nsAReadableString& aString,eHTMLTags aTag)
|
||||
: CHTMLToken(aTag), mTextValue(aString) {
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -452,6 +452,7 @@ protected:
|
|||
class CDoctypeDeclToken: public CHTMLToken {
|
||||
public:
|
||||
CDoctypeDeclToken(eHTMLTags aTag=eHTMLTag_unknown);
|
||||
CDoctypeDeclToken(const nsAReadableString& aString,eHTMLTags aTag=eHTMLTag_unknown);
|
||||
virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
|
||||
virtual const char* GetClassName(void);
|
||||
virtual PRInt32 GetTokenType(void);
|
||||
|
|
|
@ -1228,7 +1228,7 @@ nsXMLContentSink::AddDocTypeDecl(const nsIParserNode& aNode, PRInt32 aMode)
|
|||
nsAutoString docTypeStr(aNode.GetText());
|
||||
nsAutoString str, name, publicId, systemId;
|
||||
|
||||
if (docTypeStr.EqualsWithConversion("<!DOCTYPE", PR_FALSE, 9)) {
|
||||
if (docTypeStr.EqualsWithConversion("<!DOCTYPE", PR_FALSE, 10)) {
|
||||
docTypeStr.Right(str, docTypeStr.Length()-9);
|
||||
}
|
||||
|
||||
|
|
|
@ -1246,7 +1246,7 @@ CToken* nsTokenAllocator::CreateTokenOfType(eHTMLTokenTypes aType,eHTMLTags aTag
|
|||
case eToken_instruction: result=new(mArenaPool) CInstructionToken(aString); break;
|
||||
case eToken_cdatasection: result=new(mArenaPool) CCDATASectionToken(aString); break;
|
||||
case eToken_error: result=new(mArenaPool) CErrorToken(); break;
|
||||
case eToken_doctypeDecl: result=new(mArenaPool) CDoctypeDeclToken(); break;
|
||||
case eToken_doctypeDecl: result=new(mArenaPool) CDoctypeDeclToken(aString); break;
|
||||
default:
|
||||
NS_ASSERTION(PR_FALSE, "nsDTDUtils::CreateTokenOfType: illegal token type");
|
||||
break;
|
||||
|
|
|
@ -65,7 +65,6 @@ static NS_DEFINE_IID(kITokenizerIID, NS_ITOKENIZER_IID);
|
|||
static NS_DEFINE_IID(kHTMLTokenizerIID, NS_HTMLTOKENIZER_IID);
|
||||
static NS_DEFINE_IID(kClassIID, NS_EXPATTOKENIZER_IID);
|
||||
|
||||
static const char* kDocTypeDeclPrefix = "<!DOCTYPE";
|
||||
static const char* kChromeProtocol = "chrome";
|
||||
static const char* kDTDDirectory = "dtd/";
|
||||
static const char kHTMLNameSpaceURI[] = "http://www.w3.org/1999/xhtml";
|
||||
|
@ -904,7 +903,7 @@ void nsExpatTokenizer::HandleStartDoctypeDecl(void *userData,
|
|||
{
|
||||
XMLParserState* state = (XMLParserState*) userData;
|
||||
state->indoctype = PR_TRUE;
|
||||
state->doctypeText.Assign((PRUnichar*)kDocTypeDeclPrefix);
|
||||
state->doctypeText.Assign(NS_LITERAL_STRING("<!DOCTYPE "));
|
||||
}
|
||||
|
||||
void nsExpatTokenizer::HandleEndDoctypeDecl(void *userData)
|
||||
|
|
|
@ -2091,7 +2091,12 @@ const nsAReadableString& CErrorToken::GetStringValue(void)
|
|||
|
||||
// Doctype decl token
|
||||
|
||||
CDoctypeDeclToken::CDoctypeDeclToken(eHTMLTags aTag) : CHTMLToken(aTag) {
|
||||
CDoctypeDeclToken::CDoctypeDeclToken(eHTMLTags aTag)
|
||||
: CHTMLToken(aTag) {
|
||||
}
|
||||
|
||||
CDoctypeDeclToken::CDoctypeDeclToken(const nsAReadableString& aString,eHTMLTags aTag)
|
||||
: CHTMLToken(aTag), mTextValue(aString) {
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -452,6 +452,7 @@ protected:
|
|||
class CDoctypeDeclToken: public CHTMLToken {
|
||||
public:
|
||||
CDoctypeDeclToken(eHTMLTags aTag=eHTMLTag_unknown);
|
||||
CDoctypeDeclToken(const nsAReadableString& aString,eHTMLTags aTag=eHTMLTag_unknown);
|
||||
virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
|
||||
virtual const char* GetClassName(void);
|
||||
virtual PRInt32 GetTokenType(void);
|
||||
|
|
Загрузка…
Ссылка в новой задаче