[Pkg-mozext-commits] [requestpolicy] 242/280: fix fail of `testRequestLogShowsUriWithoutHost`

David Prévot taffit at moszumanska.debian.org
Sat May 2 20:30:34 UTC 2015


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository requestpolicy.

commit 486ad3964b38d153482f618edc6f15d18ee43d42
Author: Martin Kimmerle <dev at 256k.de>
Date:   Sat Mar 21 03:35:01 2015 +0100

    fix fail of `testRequestLogShowsUriWithoutHost`
    
    URIs without a host will from now on be displayed in the request
    log.
---
 src/content/lib/request-processor.jsm | 34 +++++++++++++++++----------
 src/content/lib/utils/domains.jsm     | 11 ++++++++-
 src/content/ui/menu.js                | 10 ++++++--
 src/content/ui/overlay.js             | 44 ++++++++++++++++++++++++-----------
 4 files changed, 71 insertions(+), 28 deletions(-)

diff --git a/src/content/lib/request-processor.jsm b/src/content/lib/request-processor.jsm
index a4854ad..8f3dde4 100644
--- a/src/content/lib/request-processor.jsm
+++ b/src/content/lib/request-processor.jsm
@@ -232,21 +232,24 @@ let RequestProcessor = (function(self) {
           REQUEST_REASON_DEFAULT_POLICY);
       return result;
     }
+
     if (Prefs.isDefaultAllowSameDomain()) {
-      var originDomain = DomainUtil.getBaseDomain(
-          originUri);
+      var originDomain = DomainUtil.getBaseDomain(originUri);
       var destDomain = DomainUtil.getBaseDomain(destUri);
-      return new RequestResult(originDomain == destDomain,
-          REQUEST_REASON_DEFAULT_SAME_DOMAIN);
+
+      if (originDomain !== null && destDomain !== null) {
+        // apply this rule only if both origin and dest URIs
+        // do have a host.
+        return new RequestResult(originDomain === destDomain,
+            REQUEST_REASON_DEFAULT_SAME_DOMAIN);
+      }
     }
     // We probably want to allow requests from http:80 to https:443 of the same
     // domain. However, maybe this is so uncommon it's not worth any extra
     // complexity.
-    var originIdent = DomainUtil.getIdentifier(
-        originUri, DomainUtil.LEVEL_SOP);
-    var destIdent = DomainUtil.getIdentifier(destUri,
-        DomainUtil.LEVEL_SOP);
-    return new RequestResult(originIdent == destIdent,
+    var originIdent = DomainUtil.getIdentifier(originUri, DomainUtil.LEVEL_SOP);
+    var destIdent = DomainUtil.getIdentifier(destUri, DomainUtil.LEVEL_SOP);
+    return new RequestResult(originIdent === destIdent,
         REQUEST_REASON_DEFAULT_SAME_DOMAIN);
   };
 
@@ -293,7 +296,7 @@ let RequestProcessor = (function(self) {
     // We're assuming ident is fullIdent (LEVEL_SOP). We plan to remove base
     // domain and hostname levels.
     for (var originUri in requests) {
-      if (DomainUtil.getBaseDomain(originUri) != currentlySelectedOrigin) {
+      if (DomainUtil.getBaseDomain(originUri) !== currentlySelectedOrigin) {
         // only return requests from the given base domain
         continue;
       }
@@ -585,7 +588,13 @@ let RequestProcessor = (function(self) {
 
       let uriSchemeShouldLoadResult = request.checkURISchemes().shouldLoad;
       if (uriSchemeShouldLoadResult !== null) {
-        return uriSchemeShouldLoadResult === true ? CP_OK : CP_REJECT;
+        request.requestResult = new RequestResult(uriSchemeShouldLoadResult,
+            REQUEST_REASON_COMPATIBILITY);
+        if (uriSchemeShouldLoadResult === true) {
+          return accept("Allowing request due to scheme-workaround", request);
+        } else {
+          return reject("Blocking request due to scheme-workaround", request);
+        }
       }
 
 
@@ -710,7 +719,8 @@ let RequestProcessor = (function(self) {
       // solution but I'm not sure what that solution is.
       var originIdent = DomainUtil.getIdentifier(originURI);
       var destIdent = DomainUtil.getIdentifier(destURI);
-      if (originIdent == destIdent) {
+      if (originIdent === destIdent &&
+          originIdent !== null && destIdent !== null) {
         request.requestResult = new RequestResult(true,
             REQUEST_REASON_IDENTICAL_IDENTIFIER);
         return accept(
diff --git a/src/content/lib/utils/domains.jsm b/src/content/lib/utils/domains.jsm
index 85605e1..690bb2c 100644
--- a/src/content/lib/utils/domains.jsm
+++ b/src/content/lib/utils/domains.jsm
@@ -113,7 +113,13 @@ DomainUtil.getIdentifier = function(uri, level) {
  *         invalid uri.
  */
 DomainUtil.getHost = function(uri) {
-  return this.getUriObject(uri).host;
+  let uriObj = this.getUriObject(uri);
+  try {
+    return uriObj.host;
+  } catch(e) {
+    // it's an URI without host
+    return null;
+  }
 };
 
 /**
@@ -166,6 +172,9 @@ DomainUtil.isValidUri = function(uri) {
  */
 DomainUtil.getBaseDomain = function(uri) {
   var host = this.getHost(uri);
+  if (host === null) {
+    return null;
+  }
   try {
     // The nsIEffectiveTLDService functions will always leave IDNs as ACE.
     var baseDomain = Services.eTLD.getBaseDomainFromHost(host, 0);
diff --git a/src/content/ui/menu.js b/src/content/ui/menu.js
index 3dd76a5..d31fedd 100644
--- a/src/content/ui/menu.js
+++ b/src/content/ui/menu.js
@@ -112,6 +112,12 @@ requestpolicy.menu = (function() {
 
       try {
         self._currentBaseDomain = DomainUtil.getBaseDomain(self._currentUri);
+        if (self._currentBaseDomain === null) {
+          Logger.info(Logger.TYPE_INTERNAL, "Unable to prepare menu because " +
+              "the current uri has no host: " + self._currentUri);
+          self._populateMenuForUncontrollableOrigin();
+          return;
+        }
       } catch (e) {
         Logger.info(Logger.TYPE_INTERNAL, "Unable to prepare menu because " +
             "base domain can't be determined: " + self._currentUri);
@@ -710,7 +716,7 @@ requestpolicy.menu = (function() {
 
     for (var originUri in allRequests) {
       var originBase = DomainUtil.getBaseDomain(originUri);
-      if (originBase != self._currentBaseDomain) {
+      if (originBase !== self._currentBaseDomain) {
         continue;
       }
 
@@ -730,7 +736,7 @@ requestpolicy.menu = (function() {
     var guiOrigins = [];
     for (var originUri in allRequests) {
       var originBase = DomainUtil.getBaseDomain(originUri);
-      if (originBase == self._currentBaseDomain) {
+      if (originBase === self._currentBaseDomain) {
         continue;
       }
 
diff --git a/src/content/ui/overlay.js b/src/content/ui/overlay.js
index 4231106..c4fe16b 100644
--- a/src/content/ui/overlay.js
+++ b/src/content/ui/overlay.js
@@ -524,28 +524,46 @@ requestpolicy.overlay = (function() {
     DOMUtils.removeChildren(addRulePopup);
 
     let m = requestpolicy.menu;
-    var origin = m._addWildcard(DomainUtil.getBaseDomain(redirectOriginUri));
-    var dest = m._addWildcard(DomainUtil.getBaseDomain(redirectTargetUri));
+    var originBaseDomain = DomainUtil.getBaseDomain(redirectOriginUri);
+    var destBaseDomain = DomainUtil.getBaseDomain(redirectTargetUri);
 
+    var origin = null, dest = null;
+    if (originBaseDomain !== null) {
+      origin = m._addWildcard(originBaseDomain);
+    }
+    if (destBaseDomain !== null) {
+      dest = m._addWildcard(destBaseDomain);
+    }
 
     let mayPermRulesBeAdded = WindowUtils.mayPermanentRulesBeAdded(window);
 
     let cm = requestpolicy.classicmenu;
-    cm.addMenuItemTemporarilyAllowDest(addRulePopup, dest);
-    if (mayPermRulesBeAdded) {
-      cm.addMenuItemAllowDest(addRulePopup, dest);
+
+    if (destBaseDomain !== null) {
+      cm.addMenuItemTemporarilyAllowDest(addRulePopup, dest);
+      if (mayPermRulesBeAdded) {
+        cm.addMenuItemAllowDest(addRulePopup, dest);
+      }
     }
-    cm.addMenuSeparator(addRulePopup);
 
-    cm.addMenuItemTemporarilyAllowOrigin(addRulePopup, origin);
-    if (mayPermRulesBeAdded) {
-      cm.addMenuItemAllowOrigin(addRulePopup, origin);
+    if (originBaseDomain !== null && destBaseDomain !== null) {
+      cm.addMenuSeparator(addRulePopup);
     }
-    cm.addMenuSeparator(addRulePopup);
 
-    cm.addMenuItemTemporarilyAllowOriginToDest(addRulePopup, origin, dest);
-    if (mayPermRulesBeAdded) {
-      cm.addMenuItemAllowOriginToDest(addRulePopup, origin, dest);
+    if (originBaseDomain !== null) {
+      cm.addMenuItemTemporarilyAllowOrigin(addRulePopup, origin);
+      if (mayPermRulesBeAdded) {
+        cm.addMenuItemAllowOrigin(addRulePopup, origin);
+      }
+    }
+
+    if (originBaseDomain !== null && destBaseDomain !== null) {
+      cm.addMenuSeparator(addRulePopup);
+
+      cm.addMenuItemTemporarilyAllowOriginToDest(addRulePopup, origin, dest);
+      if (mayPermRulesBeAdded) {
+        cm.addMenuItemAllowOriginToDest(addRulePopup, origin, dest);
+      }
     }
 
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/requestpolicy.git



More information about the Pkg-mozext-commits mailing list