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:
jst%netscape.com 2000-12-14 02:30:12 +00:00
Родитель 3b54f4a99c
Коммит 1bd04c173d
10 изменённых файлов: 20 добавлений и 10 удалений

Просмотреть файл

@ -1228,7 +1228,7 @@ nsXMLContentSink::AddDocTypeDecl(const nsIParserNode& aNode, PRInt32 aMode)
nsAutoString docTypeStr(aNode.GetText()); nsAutoString docTypeStr(aNode.GetText());
nsAutoString str, name, publicId, systemId; 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); 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_instruction: result=new(mArenaPool) CInstructionToken(aString); break;
case eToken_cdatasection: result=new(mArenaPool) CCDATASectionToken(aString); break; case eToken_cdatasection: result=new(mArenaPool) CCDATASectionToken(aString); break;
case eToken_error: result=new(mArenaPool) CErrorToken(); 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: default:
NS_ASSERTION(PR_FALSE, "nsDTDUtils::CreateTokenOfType: illegal token type"); NS_ASSERTION(PR_FALSE, "nsDTDUtils::CreateTokenOfType: illegal token type");
break; 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(kHTMLTokenizerIID, NS_HTMLTOKENIZER_IID);
static NS_DEFINE_IID(kClassIID, NS_EXPATTOKENIZER_IID); static NS_DEFINE_IID(kClassIID, NS_EXPATTOKENIZER_IID);
static const char* kDocTypeDeclPrefix = "<!DOCTYPE";
static const char* kChromeProtocol = "chrome"; static const char* kChromeProtocol = "chrome";
static const char* kDTDDirectory = "dtd/"; static const char* kDTDDirectory = "dtd/";
static const char kHTMLNameSpaceURI[] = "http://www.w3.org/1999/xhtml"; static const char kHTMLNameSpaceURI[] = "http://www.w3.org/1999/xhtml";
@ -904,7 +903,7 @@ void nsExpatTokenizer::HandleStartDoctypeDecl(void *userData,
{ {
XMLParserState* state = (XMLParserState*) userData; XMLParserState* state = (XMLParserState*) userData;
state->indoctype = PR_TRUE; state->indoctype = PR_TRUE;
state->doctypeText.Assign((PRUnichar*)kDocTypeDeclPrefix); state->doctypeText.Assign(NS_LITERAL_STRING("<!DOCTYPE "));
} }
void nsExpatTokenizer::HandleEndDoctypeDecl(void *userData) void nsExpatTokenizer::HandleEndDoctypeDecl(void *userData)

Просмотреть файл

@ -2091,7 +2091,12 @@ const nsAReadableString& CErrorToken::GetStringValue(void)
// Doctype decl token // 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 { class CDoctypeDeclToken: public CHTMLToken {
public: public:
CDoctypeDeclToken(eHTMLTags aTag=eHTMLTag_unknown); CDoctypeDeclToken(eHTMLTags aTag=eHTMLTag_unknown);
CDoctypeDeclToken(const nsAReadableString& aString,eHTMLTags aTag=eHTMLTag_unknown);
virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode); virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
virtual const char* GetClassName(void); virtual const char* GetClassName(void);
virtual PRInt32 GetTokenType(void); virtual PRInt32 GetTokenType(void);

Просмотреть файл

@ -1228,7 +1228,7 @@ nsXMLContentSink::AddDocTypeDecl(const nsIParserNode& aNode, PRInt32 aMode)
nsAutoString docTypeStr(aNode.GetText()); nsAutoString docTypeStr(aNode.GetText());
nsAutoString str, name, publicId, systemId; 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); 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_instruction: result=new(mArenaPool) CInstructionToken(aString); break;
case eToken_cdatasection: result=new(mArenaPool) CCDATASectionToken(aString); break; case eToken_cdatasection: result=new(mArenaPool) CCDATASectionToken(aString); break;
case eToken_error: result=new(mArenaPool) CErrorToken(); 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: default:
NS_ASSERTION(PR_FALSE, "nsDTDUtils::CreateTokenOfType: illegal token type"); NS_ASSERTION(PR_FALSE, "nsDTDUtils::CreateTokenOfType: illegal token type");
break; 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(kHTMLTokenizerIID, NS_HTMLTOKENIZER_IID);
static NS_DEFINE_IID(kClassIID, NS_EXPATTOKENIZER_IID); static NS_DEFINE_IID(kClassIID, NS_EXPATTOKENIZER_IID);
static const char* kDocTypeDeclPrefix = "<!DOCTYPE";
static const char* kChromeProtocol = "chrome"; static const char* kChromeProtocol = "chrome";
static const char* kDTDDirectory = "dtd/"; static const char* kDTDDirectory = "dtd/";
static const char kHTMLNameSpaceURI[] = "http://www.w3.org/1999/xhtml"; static const char kHTMLNameSpaceURI[] = "http://www.w3.org/1999/xhtml";
@ -904,7 +903,7 @@ void nsExpatTokenizer::HandleStartDoctypeDecl(void *userData,
{ {
XMLParserState* state = (XMLParserState*) userData; XMLParserState* state = (XMLParserState*) userData;
state->indoctype = PR_TRUE; state->indoctype = PR_TRUE;
state->doctypeText.Assign((PRUnichar*)kDocTypeDeclPrefix); state->doctypeText.Assign(NS_LITERAL_STRING("<!DOCTYPE "));
} }
void nsExpatTokenizer::HandleEndDoctypeDecl(void *userData) void nsExpatTokenizer::HandleEndDoctypeDecl(void *userData)

Просмотреть файл

@ -2091,7 +2091,12 @@ const nsAReadableString& CErrorToken::GetStringValue(void)
// Doctype decl token // 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 { class CDoctypeDeclToken: public CHTMLToken {
public: public:
CDoctypeDeclToken(eHTMLTags aTag=eHTMLTag_unknown); CDoctypeDeclToken(eHTMLTags aTag=eHTMLTag_unknown);
CDoctypeDeclToken(const nsAReadableString& aString,eHTMLTags aTag=eHTMLTag_unknown);
virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode); virtual nsresult Consume(PRUnichar aChar,nsScanner& aScanner,PRInt32 aMode);
virtual const char* GetClassName(void); virtual const char* GetClassName(void);
virtual PRInt32 GetTokenType(void); virtual PRInt32 GetTokenType(void);