Prevent a potential stack overflow if a wsdl file imports itself. b=202478, r=nisheeth@netscape.com sr=jst@netscape.com
git-svn-id: svn://10.0.0.236/trunk@141412 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
b86d923d46
commit
5a22740af1
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user