Bug 877164, return early if nsDocument::Init fails, r=smaug
--- a/content/html/document/src/nsHTMLDocument.cpp
+++ b/content/html/document/src/nsHTMLDocument.cpp
@@ -164,30 +164,29 @@ RemoveFromAgentSheets(nsCOMArray<nsIStyl
}
return NS_OK;
}
nsresult
NS_NewHTMLDocument(nsIDocument** aInstancePtrResult, bool aLoadedAsData)
{
- nsHTMLDocument* doc = new nsHTMLDocument();
- NS_ENSURE_TRUE(doc, NS_ERROR_OUT_OF_MEMORY);
-
- NS_ADDREF(doc);
+ nsRefPtr<nsHTMLDocument> doc = new nsHTMLDocument();
+
nsresult rv = doc->Init();
if (NS_FAILED(rv)) {
- NS_RELEASE(doc);
+ *aInstancePtrResult = nullptr;
+ return rv;
}
- *aInstancePtrResult = doc;
doc->SetLoadedAsData(aLoadedAsData);
-
- return rv;
+ doc.forget(aInstancePtrResult);
+
+ return NS_OK;
}
// NOTE! nsDocument::operator new() zeroes out all members, so don't
// bother initializing members to 0.
nsHTMLDocument::nsHTMLDocument()
: nsDocument("text/html")
{
--- a/content/xml/document/src/XMLDocument.cpp
+++ b/content/xml/document/src/XMLDocument.cpp
@@ -168,34 +168,32 @@ NS_NewDOMDocument(nsIDOMDocument** aInst
}
*aInstancePtrResult = doc;
NS_ADDREF(*aInstancePtrResult);
return NS_OK;
}
-
nsresult
NS_NewXMLDocument(nsIDocument** aInstancePtrResult, bool aLoadedAsData)
{
- XMLDocument* doc = new XMLDocument();
- NS_ENSURE_TRUE(doc, NS_ERROR_OUT_OF_MEMORY);
+ nsRefPtr<XMLDocument> doc = new XMLDocument();
- NS_ADDREF(doc);
nsresult rv = doc->Init();
if (NS_FAILED(rv)) {
- NS_RELEASE(doc);
+ *aInstancePtrResult = nullptr;
+ return rv;
}
- *aInstancePtrResult = doc;
doc->SetLoadedAsData(aLoadedAsData);
+ doc.forget(aInstancePtrResult);
- return rv;
+ return NS_OK;
}
nsresult
NS_NewXBLDocument(nsIDOMDocument** aInstancePtrResult,
nsIURI* aDocumentURI,
nsIURI* aBaseURI,
nsIPrincipal* aPrincipal)
{