Bug 1447341 - don't try to get a protocol handler for empty schemes, r?valentin draft
authorGijs Kruitbosch <gijskruitbosch@gmail.com>
Tue, 17 Apr 2018 15:38:36 +0100
changeset 784346 64f362f9694d974887640a20472217634bb45240
parent 784345 69c9f315efedf348349b0b1bbc40e324ebc0a6b4
child 784347 71a7b72165b939ee7a3e386e3e27c7dc2c9161ef
push id106899
push userbmo:gijskruitbosch+bugs@gmail.com
push dateWed, 18 Apr 2018 12:35:51 +0000
reviewersvalentin
bugs1447341
milestone61.0a1
Bug 1447341 - don't try to get a protocol handler for empty schemes, r?valentin MozReview-Commit-ID: 3wJBC9TQsoV
docshell/base/nsDefaultURIFixup.cpp
netwerk/base/nsIOService.cpp
--- a/docshell/base/nsDefaultURIFixup.cpp
+++ b/docshell/base/nsDefaultURIFixup.cpp
@@ -283,18 +283,22 @@ nsDefaultURIFixup::GetFixupURIInfo(const
       info->mFixupChangedProtocol = true;
     }
   }
 
   // Now we need to check whether "scheme" is something we don't
   // really know about.
   nsCOMPtr<nsIProtocolHandler> ourHandler, extHandler;
 
-  ioService->GetProtocolHandler(scheme.get(), getter_AddRefs(ourHandler));
   extHandler = do_GetService(NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX "default");
+  if (!scheme.IsEmpty()) {
+    ioService->GetProtocolHandler(scheme.get(), getter_AddRefs(ourHandler));
+  } else {
+    ourHandler = extHandler;
+  }
 
   if (ourHandler != extHandler || !PossiblyHostPortUrl(uriString)) {
     // Just try to create an URL out of it
     rv = NS_NewURI(getter_AddRefs(info->mFixedURI), uriString, nullptr);
 
     if (!info->mFixedURI && rv != NS_ERROR_MALFORMED_URI) {
       return rv;
     }
--- a/netwerk/base/nsIOService.cpp
+++ b/netwerk/base/nsIOService.cpp
@@ -537,17 +537,17 @@ nsIOService::GetProtocolHandler(const ch
     // XXX we may want to speed this up by introducing our own protocol
     // scheme -> protocol handler mapping, avoiding the string manipulation
     // and service manager stuff
 
     rv = GetCachedProtocolHandler(scheme, result);
     if (NS_SUCCEEDED(rv))
         return rv;
 
-    if (!UsesExternalProtocolHandler(scheme)) {
+    if (scheme[0] != '\0' && !UsesExternalProtocolHandler(scheme)) {
         nsAutoCString contractID(NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX);
         contractID += scheme;
         ToLowerCase(contractID);
 
         rv = CallGetService(contractID.get(), result);
         if (NS_SUCCEEDED(rv)) {
             CacheProtocolHandler(scheme, *result);
             return rv;