[tbb-commits] [torbutton/maint-9.0] Bug 32125: Fix circuit display for bridge without a fingerprint

gk at torproject.org gk at torproject.org
Tue Nov 26 09:00:58 UTC 2019


commit 38209d00a355de274759c484a398fe381d8014cb
Author: Richard Pospesel <richard at torproject.org>
Date:   Thu Oct 17 14:40:40 2019 -0700

    Bug 32125: Fix circuit display for bridge without a fingerprint
    
    Torbutton expects all bridges to have a fingerprint when creating
    the browser's circuit display. This patch works around the case
    when the user provides a bridge without a fingerprint by assuming
    it is a bridge, but we cannot determine the other displayed info:
    type (obfs4, meek, etc) nor the ip.
    
    In this scenario, the entry node in the circuit display will simply
    say "Bridge".
---
 chrome/content/tor-circuit-display.js | 24 ++++++++++++++++--------
 modules/tor-control-port.js           |  3 +++
 2 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/chrome/content/tor-circuit-display.js b/chrome/content/tor-circuit-display.js
index f75bd781..21bcc57b 100644
--- a/chrome/content/tor-circuit-display.js
+++ b/chrome/content/tor-circuit-display.js
@@ -84,12 +84,19 @@ let nodeDataForID = async function (controller, id) {
       result.ip = bridge.address.split(":")[0];
     } catch (e) { }
   } else {
-    result.type = "default";
-    // Get the IP address for the given node ID.
-     try {
-       let statusMap = await controller.getInfo("ns/id/" + id);
-       result.ip = statusMap.IP;
-     } catch (e) { }
+    // either dealing with a relay, or a bridge whose fingerprint is not saved in torrc
+    try {
+      let statusMap = await controller.getInfo("ns/id/" + id);
+      result.type = "default";
+      result.ip = statusMap.IP;
+    } catch (e) {
+      // getInfo will throw if the given id is not a relay
+      // this probably means we are dealing with a user-provided bridge with no fingerprint
+      result.type = "bridge";
+      // we don't know the ip or type, so leave blank
+      result.ip = "";
+      result.bridgeType = "";
+    }
   }
   if (result.ip) {
     // Get the country code for the node's IP address.
@@ -294,10 +301,11 @@ let updateCircuitDisplay = function () {
         let bridgeType = nodeData[i].bridgeType;
         if (bridgeType === "meek_lite") {
           relayText += ": meek";
-        } else if (bridgeType !== "vanilla") {
+        }
+        else if (bridgeType !== "vanilla" && bridgeType !== "") {
           relayText += ": " + bridgeType;
         }
-      } else {
+      } else if (nodeData[i].type == "default") {
         relayText = localizedCountryNameFromCode(nodeData[i].countryCode);
       }
       let ip = nodeData[i].ip.startsWith("0.") ? "" : nodeData[i].ip;
diff --git a/modules/tor-control-port.js b/modules/tor-control-port.js
index 6e310b52..9f6dbeb6 100644
--- a/modules/tor-control-port.js
+++ b/modules/tor-control-port.js
@@ -459,6 +459,9 @@ info.streamStatusParser = function (text) {
                                   "CircuitID", "Target"]);
 };
 
+
+// TODO: fix this parsing logic to handle bridgeLine correctly
+// fingerprint/id is an optional parameter
 // __info.bridgeParser(bridgeLine)__.
 // Takes a single line from a `getconf bridge` result and returns
 // a map containing the bridge's type, address, and ID.



More information about the tbb-commits mailing list