From 9554ec97fa301d4ace542b0927e2b1923cfd7f87 Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Wed, 31 Aug 2016 12:13:59 +1000 Subject: [PATCH] Bug 1297300 - Add missing checks to GetSpec() calls in parser/. r=hsivonen. --HG-- extra : rebase_source : 7d60e8d05180a84072ecd148ab5fe74c256acbd1 --- parser/html/nsHtml5StreamParser.cpp | 5 ++++- parser/html/nsHtml5TreeOpExecutor.cpp | 3 ++- parser/html/nsHtml5TreeOperation.cpp | 5 +++-- parser/html/nsParserUtils.cpp | 8 +++++--- parser/htmlparser/nsExpatDriver.cpp | 3 ++- 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/parser/html/nsHtml5StreamParser.cpp b/parser/html/nsHtml5StreamParser.cpp index b25bf6b40823..83bf4d8b6445 100644 --- a/parser/html/nsHtml5StreamParser.cpp +++ b/parser/html/nsHtml5StreamParser.cpp @@ -286,7 +286,10 @@ nsHtml5StreamParser::SetViewSourceTitle(nsIURI* aURL) // UTF-8 for an ellipsis. mViewSourceTitle.AssignLiteral("data:\xE2\x80\xA6"); } else { - temp->GetSpec(mViewSourceTitle); + nsresult rv = temp->GetSpec(mViewSourceTitle); + if (NS_FAILED(rv)) { + mViewSourceTitle.AssignLiteral("\xE2\x80\xA6"); + } } } } diff --git a/parser/html/nsHtml5TreeOpExecutor.cpp b/parser/html/nsHtml5TreeOpExecutor.cpp index a79802007ae9..b0eabb13d6e3 100644 --- a/parser/html/nsHtml5TreeOpExecutor.cpp +++ b/parser/html/nsHtml5TreeOpExecutor.cpp @@ -899,7 +899,8 @@ bool nsHtml5TreeOpExecutor::ShouldPreloadURI(nsIURI *aURI) { nsAutoCString spec; - aURI->GetSpec(spec); + nsresult rv = aURI->GetSpec(spec); + NS_ENSURE_SUCCESS(rv, false); if (mPreloadedURLs.Contains(spec)) { return false; } diff --git a/parser/html/nsHtml5TreeOperation.cpp b/parser/html/nsHtml5TreeOperation.cpp index 44bef370d247..3ba9ec975b8b 100644 --- a/parser/html/nsHtml5TreeOperation.cpp +++ b/parser/html/nsHtml5TreeOperation.cpp @@ -911,7 +911,8 @@ nsHtml5TreeOperation::Perform(nsHtml5TreeOpExecutor* aBuilder, } nsAutoCString spec; - uri->GetSpec(spec); + rv = uri->GetSpec(spec); + NS_ENSURE_SUCCESS(rv, rv); viewSourceUrl.Append(spec); @@ -919,7 +920,7 @@ nsHtml5TreeOperation::Perform(nsHtml5TreeOpExecutor* aBuilder, CopyUTF8toUTF16(viewSourceUrl, utf16); node->SetAttr(kNameSpaceID_None, nsGkAtoms::href, utf16, true); - return rv; + return NS_OK; } case eTreeOpAddViewSourceBase: { char16_t* buffer = mTwo.unicharPtr; diff --git a/parser/html/nsParserUtils.cpp b/parser/html/nsParserUtils.cpp index a423103ece3e..9e0bb8c9e219 100644 --- a/parser/html/nsParserUtils.cpp +++ b/parser/html/nsParserUtils.cpp @@ -160,6 +160,7 @@ nsParserUtils::ParseFragment(const nsAString& aFragment, // Wrap things in a div or body for parsing, but it won't show up in // the fragment. + nsresult rv = NS_OK; AutoTArray tagStack; nsAutoCString base, spec; if (aIsXML) { @@ -167,7 +168,8 @@ nsParserUtils::ParseFragment(const nsAString& aFragment, if (aBaseURI) { base.AppendLiteral(XHTML_DIV_TAG); base.AppendLiteral(" xml:base=\""); - aBaseURI->GetSpec(spec); + rv = aBaseURI->GetSpec(spec); + NS_ENSURE_SUCCESS(rv, rv); // nsEscapeHTML is good enough, because we only need to get // quotes, ampersands, and angle brackets char* escapedSpec = nsEscapeHTML(spec.get()); @@ -181,7 +183,6 @@ nsParserUtils::ParseFragment(const nsAString& aFragment, } } - nsresult rv = NS_OK; nsCOMPtr fragment; if (aIsXML) { rv = nsContentUtils::ParseFragmentXML(aFragment, @@ -201,7 +202,8 @@ nsParserUtils::ParseFragment(const nsAString& aFragment, true); // Now, set the base URI on all subtree roots. if (aBaseURI) { - aBaseURI->GetSpec(spec); + nsresult rv2 = aBaseURI->GetSpec(spec); + NS_ENSURE_SUCCESS(rv2, rv2); nsAutoString spec16; CopyUTF8toUTF16(spec, spec16); nsIContent* node = fragment->GetFirstChild(); diff --git a/parser/htmlparser/nsExpatDriver.cpp b/parser/htmlparser/nsExpatDriver.cpp index 8561192487e3..273ccf88bc7d 100644 --- a/parser/htmlparser/nsExpatDriver.cpp +++ b/parser/htmlparser/nsExpatDriver.cpp @@ -805,7 +805,8 @@ nsExpatDriver::OpenInputStreamFromExternalDTD(const char16_t* aFPIStr, NS_ENSURE_SUCCESS(rv, rv); nsAutoCString absURL; - uri->GetSpec(absURL); + rv = uri->GetSpec(absURL); + NS_ENSURE_SUCCESS(rv, rv); CopyUTF8toUTF16(absURL, aAbsURL); channel->SetContentType(NS_LITERAL_CSTRING("application/xml"));