Bug 1447341 - don't try to get a protocol handler for empty schemes, r?valentin
MozReview-Commit-ID: 3wJBC9TQsoV
--- 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;