зеркало из https://github.com/mozilla/gecko-dev.git
bug 299151, fix crash in rdfxml serializer when QIed to bad interface on creation, r=bsmedberg, sr=shaver, a=bsmedberg
This commit is contained in:
Родитель
d99a80f804
Коммит
c566fcd541
|
@ -80,16 +80,19 @@ nsRDFXMLSerializer::Create(nsISupports* aOuter, REFNSIID aIID, void** aResult)
|
||||||
if (aOuter)
|
if (aOuter)
|
||||||
return NS_ERROR_NO_AGGREGATION;
|
return NS_ERROR_NO_AGGREGATION;
|
||||||
|
|
||||||
nsRDFXMLSerializer* result = new nsRDFXMLSerializer();
|
nsCOMPtr<nsIRDFXMLSerializer> result = new nsRDFXMLSerializer();
|
||||||
if (! result)
|
if (! result)
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
// The serializer object is here, addref gRefCnt so that the
|
||||||
NS_ADDREF(result);
|
// destructor can safely release it.
|
||||||
|
gRefCnt++;
|
||||||
|
|
||||||
nsresult rv;
|
nsresult rv;
|
||||||
rv = result->QueryInterface(aIID, aResult);
|
rv = result->QueryInterface(aIID, aResult);
|
||||||
|
|
||||||
if (NS_SUCCEEDED(rv) && (gRefCnt++ == 0)) do {
|
if (NS_FAILED(rv)) return rv;
|
||||||
|
|
||||||
|
if (gRefCnt == 1) do {
|
||||||
nsCOMPtr<nsIRDFService> rdf = do_GetService("@mozilla.org/rdf/rdf-service;1", &rv);
|
nsCOMPtr<nsIRDFService> rdf = do_GetService("@mozilla.org/rdf/rdf-service;1", &rv);
|
||||||
if (NS_FAILED(rv)) break;
|
if (NS_FAILED(rv)) break;
|
||||||
|
|
||||||
|
@ -121,8 +124,6 @@ nsRDFXMLSerializer::Create(nsISupports* aOuter, REFNSIID aIID, void** aResult)
|
||||||
if (NS_FAILED(rv)) break;
|
if (NS_FAILED(rv)) break;
|
||||||
} while (0);
|
} while (0);
|
||||||
|
|
||||||
NS_RELEASE(result);
|
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче