Fix for bug 232591 (Expose name validation methods from the XML parser (expat)). r=Pike, sr=jst.

This commit is contained in:
peterv%propagandism.org 2004-02-09 14:15:57 +00:00
Родитель 5a64b9bc98
Коммит 01c641d335
6 изменённых файлов: 78 добавлений и 8 удалений

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

@ -103,6 +103,11 @@ class nsIParserService : public nsISupports {
NS_IMETHOD GetTopicObservers(const nsAString& aTopic,
nsIObserverEntry** aEntry) = 0;
virtual PRBool IsValidQName(const nsASingleFragmentString& aQName,
PRBool aNamespaceAware,
const PRUnichar** aColon) = 0;
virtual PRBool IsXMLLetter(PRUnichar aChar) = 0;
virtual PRBool IsXMLNCNameChar(PRUnichar aChar) = 0;
};
#endif // nsIParserService_h__

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

@ -699,10 +699,11 @@ nsExpatDriver::OpenInputStreamFromExternalDTD(const PRUnichar* aFPIStr,
{
nsresult rv;
nsCOMPtr<nsIURI> baseURI;
rv = NS_NewURI(getter_AddRefs(baseURI), NS_ConvertUCS2toUTF8(aBaseURL).get());
rv = NS_NewURI(getter_AddRefs(baseURI), NS_ConvertUTF16toUTF8(aBaseURL));
if (NS_SUCCEEDED(rv) && baseURI) {
nsCOMPtr<nsIURI> uri;
rv = NS_NewURI(getter_AddRefs(uri), NS_ConvertUCS2toUTF8(aURLStr).get(), baseURI);
rv = NS_NewURI(getter_AddRefs(uri), NS_ConvertUTF16toUTF8(aURLStr), nsnull,
baseURI);
if (NS_SUCCEEDED(rv) && uri) {
// check if it is alright to load this uri
PRBool isChrome = PR_FALSE;
@ -721,7 +722,7 @@ nsExpatDriver::OpenInputStreamFromExternalDTD(const PRUnichar* aFPIStr,
rv = NS_OpenURI(in, uri);
nsCAutoString absURL;
uri->GetSpec(absURL);
aAbsURL = NS_ConvertUTF8toUCS2(absURL);
CopyUTF8toUTF16(absURL, aAbsURL);
}
}
return rv;

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

@ -25,6 +25,11 @@
#include "nsDTDUtils.h"
#include "nsVoidArray.h"
extern "C" int MOZ_XMLIsValidQName(const char* ptr, const char* end,
int ns_aware, const char** colon);
extern "C" int MOZ_XMLIsLetter(const char* ptr);
extern "C" int MOZ_XMLIsNCNameChar(const char* ptr);
class nsParserService : public nsIParserService {
public:
nsParserService();
@ -48,7 +53,7 @@ public:
NS_IMETHOD IsContainer(PRInt32 aId, PRBool& aIsContainer) const;
NS_IMETHOD IsBlock(PRInt32 aId, PRBool& aIsBlock) const;
// Observer mechanism5
// Observer mechanism
NS_IMETHOD RegisterObserver(nsIElementObserver* aObserver,
const nsAString& aTopic,
const eHTMLTags* aTags = nsnull);
@ -57,6 +62,30 @@ public:
const nsAString& aTopic);
NS_IMETHOD GetTopicObservers(const nsAString& aTopic,
nsIObserverEntry** aEntry);
PRBool IsValidQName(const nsASingleFragmentString& aQName,
PRBool aNamespaceAware,
const PRUnichar** aColon)
{
const char* colon;
const PRUnichar *begin, *end;
aQName.BeginReading(begin);
aQName.EndReading(end);
int result = MOZ_XMLIsValidQName(NS_REINTERPRET_CAST(const char*, begin),
NS_REINTERPRET_CAST(const char*, end),
aNamespaceAware, &colon);
*aColon = NS_REINTERPRET_CAST(const PRUnichar*, colon);
return !!result;
}
PRBool IsXMLLetter(PRUnichar aChar)
{
return MOZ_XMLIsLetter(NS_REINTERPRET_CAST(const char*, &aChar));
}
PRBool IsXMLNCNameChar(PRUnichar aChar)
{
return MOZ_XMLIsNCNameChar(NS_REINTERPRET_CAST(const char*, &aChar));
}
protected:
nsObserverEntry* GetEntry(const nsAString& aTopic);
nsresult CreateEntry(const nsAString& aTopic,

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

@ -103,6 +103,11 @@ class nsIParserService : public nsISupports {
NS_IMETHOD GetTopicObservers(const nsAString& aTopic,
nsIObserverEntry** aEntry) = 0;
virtual PRBool IsValidQName(const nsASingleFragmentString& aQName,
PRBool aNamespaceAware,
const PRUnichar** aColon) = 0;
virtual PRBool IsXMLLetter(PRUnichar aChar) = 0;
virtual PRBool IsXMLNCNameChar(PRUnichar aChar) = 0;
};
#endif // nsIParserService_h__

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

@ -699,10 +699,11 @@ nsExpatDriver::OpenInputStreamFromExternalDTD(const PRUnichar* aFPIStr,
{
nsresult rv;
nsCOMPtr<nsIURI> baseURI;
rv = NS_NewURI(getter_AddRefs(baseURI), NS_ConvertUCS2toUTF8(aBaseURL).get());
rv = NS_NewURI(getter_AddRefs(baseURI), NS_ConvertUTF16toUTF8(aBaseURL));
if (NS_SUCCEEDED(rv) && baseURI) {
nsCOMPtr<nsIURI> uri;
rv = NS_NewURI(getter_AddRefs(uri), NS_ConvertUCS2toUTF8(aURLStr).get(), baseURI);
rv = NS_NewURI(getter_AddRefs(uri), NS_ConvertUTF16toUTF8(aURLStr), nsnull,
baseURI);
if (NS_SUCCEEDED(rv) && uri) {
// check if it is alright to load this uri
PRBool isChrome = PR_FALSE;
@ -721,7 +722,7 @@ nsExpatDriver::OpenInputStreamFromExternalDTD(const PRUnichar* aFPIStr,
rv = NS_OpenURI(in, uri);
nsCAutoString absURL;
uri->GetSpec(absURL);
aAbsURL = NS_ConvertUTF8toUCS2(absURL);
CopyUTF8toUTF16(absURL, aAbsURL);
}
}
return rv;

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

@ -25,6 +25,11 @@
#include "nsDTDUtils.h"
#include "nsVoidArray.h"
extern "C" int MOZ_XMLIsValidQName(const char* ptr, const char* end,
int ns_aware, const char** colon);
extern "C" int MOZ_XMLIsLetter(const char* ptr);
extern "C" int MOZ_XMLIsNCNameChar(const char* ptr);
class nsParserService : public nsIParserService {
public:
nsParserService();
@ -48,7 +53,7 @@ public:
NS_IMETHOD IsContainer(PRInt32 aId, PRBool& aIsContainer) const;
NS_IMETHOD IsBlock(PRInt32 aId, PRBool& aIsBlock) const;
// Observer mechanism5
// Observer mechanism
NS_IMETHOD RegisterObserver(nsIElementObserver* aObserver,
const nsAString& aTopic,
const eHTMLTags* aTags = nsnull);
@ -57,6 +62,30 @@ public:
const nsAString& aTopic);
NS_IMETHOD GetTopicObservers(const nsAString& aTopic,
nsIObserverEntry** aEntry);
PRBool IsValidQName(const nsASingleFragmentString& aQName,
PRBool aNamespaceAware,
const PRUnichar** aColon)
{
const char* colon;
const PRUnichar *begin, *end;
aQName.BeginReading(begin);
aQName.EndReading(end);
int result = MOZ_XMLIsValidQName(NS_REINTERPRET_CAST(const char*, begin),
NS_REINTERPRET_CAST(const char*, end),
aNamespaceAware, &colon);
*aColon = NS_REINTERPRET_CAST(const PRUnichar*, colon);
return !!result;
}
PRBool IsXMLLetter(PRUnichar aChar)
{
return MOZ_XMLIsLetter(NS_REINTERPRET_CAST(const char*, &aChar));
}
PRBool IsXMLNCNameChar(PRUnichar aChar)
{
return MOZ_XMLIsNCNameChar(NS_REINTERPRET_CAST(const char*, &aChar));
}
protected:
nsObserverEntry* GetEntry(const nsAString& aTopic);
nsresult CreateEntry(const nsAString& aTopic,