summary refs log tree commit diff
path: root/gnu/packages/patches/icecat-CVE-2015-2743.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/patches/icecat-CVE-2015-2743.patch')
-rw-r--r--gnu/packages/patches/icecat-CVE-2015-2743.patch73
1 files changed, 73 insertions, 0 deletions
diff --git a/gnu/packages/patches/icecat-CVE-2015-2743.patch b/gnu/packages/patches/icecat-CVE-2015-2743.patch
new file mode 100644
index 0000000000..a74fe7b270
--- /dev/null
+++ b/gnu/packages/patches/icecat-CVE-2015-2743.patch
@@ -0,0 +1,73 @@
+From 9ed97d606aaaf79776b0e19a73ba30d8ad0685b5 Mon Sep 17 00:00:00 2001
+From: Ben Turner <bent.mozilla@gmail.com>
+Date: Tue, 26 May 2015 17:27:01 -0400
+Subject: [PATCH] Bug 1163109 - Restrict the resource:// weirdness in workers
+ to loads from a system principal. r=bzbarsky, a=lizzard
+
+--HG--
+extra : transplant_source : sQUdu%7C%ED%84%CA%5B%91%89/%1B2%25%CFY%B0%C3
+---
+ dom/workers/ScriptLoader.cpp | 37 ++++++++++++++++---------------------
+ 1 file changed, 16 insertions(+), 21 deletions(-)
+
+diff --git a/dom/workers/ScriptLoader.cpp b/dom/workers/ScriptLoader.cpp
+index 0dfe625..3335c3e 100644
+--- a/dom/workers/ScriptLoader.cpp
++++ b/dom/workers/ScriptLoader.cpp
+@@ -509,22 +509,6 @@ private:
+       rv = ssm->GetChannelPrincipal(channel, getter_AddRefs(channelPrincipal));
+       NS_ENSURE_SUCCESS(rv, rv);
+ 
+-      // See if this is a resource URI. Since JSMs usually come from resource://
+-      // URIs we're currently considering all URIs with the URI_IS_UI_RESOURCE
+-      // flag as valid for creating privileged workers.
+-      if (!nsContentUtils::IsSystemPrincipal(channelPrincipal)) {
+-        bool isResource;
+-        rv = NS_URIChainHasFlags(finalURI,
+-                                 nsIProtocolHandler::URI_IS_UI_RESOURCE,
+-                                 &isResource);
+-        NS_ENSURE_SUCCESS(rv, rv);
+-
+-        if (isResource) {
+-          rv = ssm->GetSystemPrincipal(getter_AddRefs(channelPrincipal));
+-          NS_ENSURE_SUCCESS(rv, rv);
+-        }
+-      }
+-
+       // If the load principal is the system principal then the channel
+       // principal must also be the system principal (we do not allow chrome
+       // code to create workers with non-chrome scripts). Otherwise this channel
+@@ -532,14 +516,25 @@ private:
+       // here in case redirects changed the location of the script).
+       if (nsContentUtils::IsSystemPrincipal(loadPrincipal)) {
+         if (!nsContentUtils::IsSystemPrincipal(channelPrincipal)) {
+-          return NS_ERROR_DOM_BAD_URI;
++          // See if this is a resource URI. Since JSMs usually come from
++          // resource:// URIs we're currently considering all URIs with the
++          // URI_IS_UI_RESOURCE flag as valid for creating privileged workers.
++          bool isResource;
++          rv = NS_URIChainHasFlags(finalURI,
++                                   nsIProtocolHandler::URI_IS_UI_RESOURCE,
++                                   &isResource);
++          NS_ENSURE_SUCCESS(rv, rv);
++
++          if (isResource) {
++            // Assign the system principal to the resource:// worker only if it
++            // was loaded from code using the system principal.
++            channelPrincipal = loadPrincipal;
++          } else {
++            return NS_ERROR_DOM_BAD_URI;
++          }
+         }
+       }
+       else  {
+-        nsCString scheme;
+-        rv = finalURI->GetScheme(scheme);
+-        NS_ENSURE_SUCCESS(rv, rv);
+-
+         // We exempt data urls and other URI's that inherit their
+         // principal again.
+         if (NS_FAILED(loadPrincipal->CheckMayLoad(finalURI, false, true))) {
+-- 
+2.4.3
+