From 304cb6502e6177fd0e019de7a77a8dbfa1965654 Mon Sep 17 00:00:00 2001 From: "gkrizsanits@mozilla.com" Date: Sat, 27 Jul 2013 12:12:38 +0300 Subject: [PATCH] Bug 877164, return early if nsDocument::Init fails, r=smaug --- content/html/document/src/nsHTMLDocument.cpp | 11 +++++------ content/xml/document/src/XMLDocument.cpp | 12 +++++------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/content/html/document/src/nsHTMLDocument.cpp b/content/html/document/src/nsHTMLDocument.cpp index b465fff8cca..056182d71a1 100644 --- a/content/html/document/src/nsHTMLDocument.cpp +++ b/content/html/document/src/nsHTMLDocument.cpp @@ -169,20 +169,19 @@ RemoveFromAgentSheets(nsCOMArray &aAgentSheets, const nsAString& nsresult NS_NewHTMLDocument(nsIDocument** aInstancePtrResult, bool aLoadedAsData) { - nsHTMLDocument* doc = new nsHTMLDocument(); - NS_ENSURE_TRUE(doc, NS_ERROR_OUT_OF_MEMORY); + nsRefPtr doc = new nsHTMLDocument(); - 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; } // NOTE! nsDocument::operator new() zeroes out all members, so don't diff --git a/content/xml/document/src/XMLDocument.cpp b/content/xml/document/src/XMLDocument.cpp index 93cbf03d175..8d077d5d351 100644 --- a/content/xml/document/src/XMLDocument.cpp +++ b/content/xml/document/src/XMLDocument.cpp @@ -173,24 +173,22 @@ NS_NewDOMDocument(nsIDOMDocument** 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 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