зеркало из https://github.com/mozilla/gecko-dev.git
Prevent a potential stack overflow if a wsdl file imports itself. b=202478, r=nisheeth@netscape.com sr=jst@netscape.com
This commit is contained in:
Родитель
0fb25d446f
Коммит
aeecb85b02
|
@ -61,5 +61,6 @@ interface nsIWSDLLoadListener : nsISupports
|
|||
#define NS_ERROR_WSDL_UNKNOWN_SCHEMA_COMPONENT NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_GENERAL, 4)
|
||||
#define NS_ERROR_WSDL_UNKNOWN_WSDL_COMPONENT NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_GENERAL, 5)
|
||||
#define NS_ERROR_WSDL_LOADING_ERROR NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_GENERAL, 6)
|
||||
#define NS_ERROR_WSDL_NOT_ENABLED NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_GENERAL, 7)
|
||||
#define NS_ERROR_WSDL_RECURSIVE_IMPORT NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_GENERAL, 7)
|
||||
#define NS_ERROR_WSDL_NOT_ENABLED NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_GENERAL, 8)
|
||||
%}
|
||||
|
|
|
@ -834,6 +834,23 @@ nsWSDLLoadRequest::ProcessImportElement(nsIDOMElement* aElement,
|
|||
return rv;
|
||||
}
|
||||
|
||||
// Fix ( bug 202478 ) a potential stack overflow by
|
||||
// preventing the wsdl file from loading if it was
|
||||
// already loaded via the import element.
|
||||
PRUint32 count = mImportList.Count();
|
||||
PRUint32 i;
|
||||
for (i = 0; i < count; i++) {
|
||||
PRBool equal;
|
||||
mImportList[i]->Equals(uri, &equal);
|
||||
if (equal) {
|
||||
// Looks like this uri has already been loaded.
|
||||
// Loading it again will end up in an infinite loop.
|
||||
return NS_ERROR_WSDL_RECURSIVE_IMPORT;
|
||||
}
|
||||
}
|
||||
|
||||
mImportList.AppendObject(uri);
|
||||
|
||||
nsCAutoString spec;
|
||||
uri->GetSpec(spec);
|
||||
|
||||
|
|
|
@ -204,10 +204,11 @@ protected:
|
|||
nsCOMPtr<nsIWSDLLoadListener> mListener;
|
||||
nsCOMPtr<nsIXMLHttpRequest> mRequest;
|
||||
nsCOMPtr<nsISchemaLoader> mSchemaLoader;
|
||||
|
||||
nsCOMPtr<nsIWSDLPort> mPort;
|
||||
nsCOMArray<nsIURI> mImportList;
|
||||
|
||||
PRPackedBool mIsSync;
|
||||
|
||||
nsCOMPtr<nsIWSDLPort> mPort;
|
||||
nsString mPortName;
|
||||
nsString mBindingName;
|
||||
nsString mBindingNamespace;
|
||||
|
|
|
@ -61,5 +61,6 @@ interface nsIWSDLLoadListener : nsISupports
|
|||
#define NS_ERROR_WSDL_UNKNOWN_SCHEMA_COMPONENT NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_GENERAL, 4)
|
||||
#define NS_ERROR_WSDL_UNKNOWN_WSDL_COMPONENT NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_GENERAL, 5)
|
||||
#define NS_ERROR_WSDL_LOADING_ERROR NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_GENERAL, 6)
|
||||
#define NS_ERROR_WSDL_NOT_ENABLED NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_GENERAL, 7)
|
||||
#define NS_ERROR_WSDL_RECURSIVE_IMPORT NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_GENERAL, 7)
|
||||
#define NS_ERROR_WSDL_NOT_ENABLED NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_GENERAL, 8)
|
||||
%}
|
||||
|
|
|
@ -834,6 +834,23 @@ nsWSDLLoadRequest::ProcessImportElement(nsIDOMElement* aElement,
|
|||
return rv;
|
||||
}
|
||||
|
||||
// Fix ( bug 202478 ) a potential stack overflow by
|
||||
// preventing the wsdl file from loading if it was
|
||||
// already loaded via the import element.
|
||||
PRUint32 count = mImportList.Count();
|
||||
PRUint32 i;
|
||||
for (i = 0; i < count; i++) {
|
||||
PRBool equal;
|
||||
mImportList[i]->Equals(uri, &equal);
|
||||
if (equal) {
|
||||
// Looks like this uri has already been loaded.
|
||||
// Loading it again will end up in an infinite loop.
|
||||
return NS_ERROR_WSDL_RECURSIVE_IMPORT;
|
||||
}
|
||||
}
|
||||
|
||||
mImportList.AppendObject(uri);
|
||||
|
||||
nsCAutoString spec;
|
||||
uri->GetSpec(spec);
|
||||
|
||||
|
|
|
@ -204,10 +204,11 @@ protected:
|
|||
nsCOMPtr<nsIWSDLLoadListener> mListener;
|
||||
nsCOMPtr<nsIXMLHttpRequest> mRequest;
|
||||
nsCOMPtr<nsISchemaLoader> mSchemaLoader;
|
||||
|
||||
nsCOMPtr<nsIWSDLPort> mPort;
|
||||
nsCOMArray<nsIURI> mImportList;
|
||||
|
||||
PRPackedBool mIsSync;
|
||||
|
||||
nsCOMPtr<nsIWSDLPort> mPort;
|
||||
nsString mPortName;
|
||||
nsString mBindingName;
|
||||
nsString mBindingNamespace;
|
||||
|
|
Загрузка…
Ссылка в новой задаче