From b597f8fec1e764afc14e164ea9d9163d7a7cd1dd Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Thu, 8 Sep 2016 14:32:20 +1000 Subject: [PATCH] Bug 1297300 - Add missing checks to GetSpec() calls in toolkit/. r=froydnj. --HG-- extra : rebase_source : afb0e9a0f9f5a033f57ef0881071a21fb623a6e0 --- toolkit/components/commandlines/nsCommandLine.cpp | 14 +++++++------- toolkit/components/downloads/nsDownloadManager.cpp | 9 ++++++--- .../jsdownloads/src/DownloadPlatform.cpp | 3 ++- toolkit/mozapps/extensions/AddonContentPolicy.cpp | 11 +++++------ toolkit/system/gnome/nsGIOService.cpp | 3 ++- 5 files changed, 22 insertions(+), 18 deletions(-) diff --git a/toolkit/components/commandlines/nsCommandLine.cpp b/toolkit/components/commandlines/nsCommandLine.cpp index 5a9ab412f36e..280b1d24a6d8 100644 --- a/toolkit/components/commandlines/nsCommandLine.cpp +++ b/toolkit/components/commandlines/nsCommandLine.cpp @@ -65,7 +65,7 @@ protected: void *aClosure); void appendArg(const char* arg); - void resolveShortcutURL(nsIFile* aFile, nsACString& outURL); + MOZ_MUST_USE nsresult resolveShortcutURL(nsIFile* aFile, nsACString& outURL); nsresult EnumerateHandlers(EnumerateHandlersCallback aCallback, void *aClosure); nsresult EnumerateValidators(EnumerateValidatorsCallback aCallback, void *aClosure); @@ -365,8 +365,8 @@ nsCommandLine::ResolveURI(const nsAString& aArgument, nsIURI* *aResult) lf->Normalize(); nsAutoCString url; // Try to resolve the url for .url files. - resolveShortcutURL(lf, url); - if (!url.IsEmpty()) { + rv = resolveShortcutURL(lf, url); + if (NS_SUCCEEDED(rv) && !url.IsEmpty()) { return io->NewURI(url, nullptr, workingDirURI, @@ -399,20 +399,20 @@ nsCommandLine::appendArg(const char* arg) mArgs.AppendElement(warg); } -void +nsresult nsCommandLine::resolveShortcutURL(nsIFile* aFile, nsACString& outURL) { nsCOMPtr fph; nsresult rv = NS_GetFileProtocolHandler(getter_AddRefs(fph)); if (NS_FAILED(rv)) - return; + return rv; nsCOMPtr uri; rv = fph->ReadURLFile(aFile, getter_AddRefs(uri)); if (NS_FAILED(rv)) - return; + return rv; - uri->GetSpec(outURL); + return uri->GetSpec(outURL); } NS_IMETHODIMP diff --git a/toolkit/components/downloads/nsDownloadManager.cpp b/toolkit/components/downloads/nsDownloadManager.cpp index 3a597e12ca68..b1bcbecd8777 100644 --- a/toolkit/components/downloads/nsDownloadManager.cpp +++ b/toolkit/components/downloads/nsDownloadManager.cpp @@ -1595,8 +1595,10 @@ nsDownloadManager::AddDownload(DownloadType aDownloadType, // Adding to the DB nsAutoCString source, target; - aSource->GetSpec(source); - aTarget->GetSpec(target); + rv = aSource->GetSpec(source); + NS_ENSURE_SUCCESS(rv, rv); + rv = aTarget->GetSpec(target); + NS_ENSURE_SUCCESS(rv, rv); // Track the temp file for exthandler downloads nsAutoString tempPath; @@ -2815,7 +2817,8 @@ nsDownload::SetState(DownloadState aState) // Use GIO to store the source URI for later display in the file manager. GFile* gio_file = g_file_new_for_path(NS_ConvertUTF16toUTF8(path).get()); nsCString source_uri; - mSource->GetSpec(source_uri); + rv = mSource->GetSpec(source_uri); + NS_ENSURE_SUCCESS(rv, rv); GFileInfo *file_info = g_file_info_new(); g_file_info_set_attribute_string(file_info, "metadata::download-uri", source_uri.get()); g_file_set_attributes_async(gio_file, diff --git a/toolkit/components/jsdownloads/src/DownloadPlatform.cpp b/toolkit/components/jsdownloads/src/DownloadPlatform.cpp index 72ef3b46a884..f47c800910d1 100644 --- a/toolkit/components/jsdownloads/src/DownloadPlatform.cpp +++ b/toolkit/components/jsdownloads/src/DownloadPlatform.cpp @@ -106,7 +106,8 @@ nsresult DownloadPlatform::DownloadDone(nsIURI* aSource, nsIFile* aTarget, // Use GIO to store the source URI for later display in the file manager. GFile* gio_file = g_file_new_for_path(NS_ConvertUTF16toUTF8(path).get()); nsCString source_uri; - aSource->GetSpec(source_uri); + nsresult rv = aSource->GetSpec(source_uri); + NS_ENSURE_SUCCESS(rv, rv); GFileInfo *file_info = g_file_info_new(); g_file_info_set_attribute_string(file_info, "metadata::download-uri", source_uri.get()); g_file_set_attributes_async(gio_file, diff --git a/toolkit/mozapps/extensions/AddonContentPolicy.cpp b/toolkit/mozapps/extensions/AddonContentPolicy.cpp index e65d05f9267d..90e53b2ea8bd 100644 --- a/toolkit/mozapps/extensions/AddonContentPolicy.cpp +++ b/toolkit/mozapps/extensions/AddonContentPolicy.cpp @@ -72,16 +72,15 @@ LogMessage(const nsAString &aMessage, nsIURI* aSourceURI, const nsAString &aSour nsCOMPtr error = do_CreateInstance(NS_SCRIPTERROR_CONTRACTID); NS_ENSURE_TRUE(error, NS_ERROR_OUT_OF_MEMORY); - nsAutoCString sourceName; - nsresult rv = aSourceURI->GetSpec(sourceName); - NS_ENSURE_SUCCESS(rv, rv); + nsCString sourceName = aSourceURI->GetSpecOrDefault(); uint64_t windowID = 0; GetWindowIDFromContext(aContext, &windowID); - rv = error->InitWithWindowID(aMessage, NS_ConvertUTF8toUTF16(sourceName), - aSourceSample, 0, 0, nsIScriptError::errorFlag, - "JavaScript", windowID); + nsresult rv = + error->InitWithWindowID(aMessage, NS_ConvertUTF8toUTF16(sourceName), + aSourceSample, 0, 0, nsIScriptError::errorFlag, + "JavaScript", windowID); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr console = do_GetService(NS_CONSOLESERVICE_CONTRACTID); diff --git a/toolkit/system/gnome/nsGIOService.cpp b/toolkit/system/gnome/nsGIOService.cpp index ae7a641123e4..9196c7d7629e 100644 --- a/toolkit/system/gnome/nsGIOService.cpp +++ b/toolkit/system/gnome/nsGIOService.cpp @@ -330,7 +330,8 @@ NS_IMETHODIMP nsGIOService::ShowURI(nsIURI* aURI) { nsAutoCString spec; - aURI->GetSpec(spec); + nsresult rv = aURI->GetSpec(spec); + NS_ENSURE_SUCCESS(rv, rv); GError *error = nullptr; if (!g_app_info_launch_default_for_uri(spec.get(), nullptr, &error)) { g_warning("Could not launch default application for URI: %s", error->message);