зеркало из https://github.com/mozilla/pjs.git
Fix for bug 232591 (Expose name validation methods from the XML parser (expat)). r=Pike, sr=jst.
This commit is contained in:
Родитель
5a64b9bc98
Коммит
01c641d335
|
@ -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,
|
||||
|
|
Загрузка…
Ссылка в новой задаче