diff --git a/dom/security/nsCSPService.cpp b/dom/security/nsCSPService.cpp index 7ba531030d..ec32889acf 100644 --- a/dom/security/nsCSPService.cpp +++ b/dom/security/nsCSPService.cpp @@ -75,19 +75,23 @@ subjectToCSP(nsIURI* aURI, nsContentPolicyType aContentType) { if (NS_SUCCEEDED(rv) && match) { return true; } - // finally we have to whitelist "about:" which does not fall in - // any of the two categories underneath but is not subject to CSP. + + // Finally we have to whitelist "about:" which does not fall into + // the category underneath and also "javascript:" which is not + // subject to CSP content loading rules. rv = aURI->SchemeIs("about", &match); if (NS_SUCCEEDED(rv) && match) { return false; } + rv = aURI->SchemeIs("javascript", &match); + if (NS_SUCCEEDED(rv) && match) { + return false; + } // Other protocols are not subject to CSP and can be whitelisted: // * URI_IS_LOCAL_RESOURCE // e.g. chrome:, data:, blob:, resource:, moz-icon: // * URI_INHERITS_SECURITY_CONTEXT - // e.g. javascript: - // // Please note that it should be possible for websites to // whitelist their own protocol handlers with respect to CSP, // hence we use protocol flags to accomplish that. @@ -278,7 +282,11 @@ CSPService::AsyncOnChannelRedirect(nsIChannel *oldChannel, */ nsCOMPtr originalUri; rv = oldChannel->GetOriginalURI(getter_AddRefs(originalUri)); - NS_ENSURE_SUCCESS(rv, rv); + if (NS_FAILED(rv)) { + autoCallback.DontCallback(); + oldChannel->Cancel(NS_ERROR_DOM_BAD_URI); + return rv; + } bool isPreload = nsContentUtils::IsPreloadType(policyType); @@ -310,6 +318,7 @@ CSPService::AsyncOnChannelRedirect(nsIChannel *oldChannel, // is no point in checking the real policy if (NS_CP_REJECTED(aDecision)) { autoCallback.DontCallback(); + oldChannel->Cancel(NS_ERROR_DOM_BAD_URI); return NS_BINDING_FAILED; } } @@ -333,6 +342,7 @@ CSPService::AsyncOnChannelRedirect(nsIChannel *oldChannel, // if ShouldLoad doesn't accept the load, cancel the request if (!NS_CP_ACCEPTED(aDecision)) { autoCallback.DontCallback(); + oldChannel->Cancel(NS_ERROR_DOM_BAD_URI); return NS_BINDING_FAILED; } return NS_OK; diff --git a/toolkit/content/aboutRights.xhtml b/toolkit/content/aboutRights.xhtml index cdd94e13cd..20050f374d 100644 --- a/toolkit/content/aboutRights.xhtml +++ b/toolkit/content/aboutRights.xhtml @@ -28,13 +28,13 @@

&rights.intro;