Loading src/chrome/content/torbutton.js +45 −13 Original line number Diff line number Diff line Loading @@ -2111,9 +2111,17 @@ function torbutton_local_tor_check() } } function removeBrackets(aStr) { // Remove enclosing square brackets if present. if (aStr.startsWith('[') && aStr.endsWith(']')) return aStr.substr(1, aStr.length - 2); return aStr; } // Sample response: net/listeners/socks="127.0.0.1:9149" "127.0.0.1:9150" // First, check for command argument prefix. resp = resp.toLowerCase(); if (0 != resp.indexOf(kCmdArg + '=')) { logUnexpectedResponse(); return false; Loading @@ -2122,6 +2130,11 @@ function torbutton_local_tor_check() // Retrieve configured proxy settings and check each listener against them. let socksAddr = m_tb_prefs.getCharPref("network.proxy.socks"); let socksPort = m_tb_prefs.getIntPref("network.proxy.socks_port"); let isSocket = socksAddr && (socksAddr.length > 2) && ('/' == socksAddr.charAt(0)); if (!isSocket) socksAddr = removeBrackets(socksAddr); let addrArray = resp.substr(kCmdArg.length + 1).split(' '); let foundSocksListener = false; for (let i = 0; !foundSocksListener && (i < addrArray.length); ++i) Loading @@ -2133,14 +2146,32 @@ function torbutton_local_tor_check() if ((len > 2) && ('"' == addr.charAt(0)) && ('"' == addr.charAt(len - 1))) addr = addr.substring(1, len - 1); // Check against the configured proxy. let tokens = addr.split(':'); if (tokens.length < 2) if (addr.startsWith("unix:")) { if (!isSocket) continue; // Check against the configured UNIX domain socket proxy. We expect to // find "/path" in socksAddr and we ignore socksPort. This matches what // is proposed for Firefox; see: // https://bugzilla.mozilla.org/show_bug.cgi?id=1211567 let path = addr.substring(5); torbutton_log(2, "Tor socks listener (socket): " + path); foundSocksListener = (socksAddr == path); } else if (!isSocket) { // Check against the configured TCP proxy. We expect addr:port where addr // may be an IPv6 address; that is, it may contain colon characters. Also, // we remove enclosing square brackets before comparing addresses because // tor requires them but Firefox does not. let idx = addr.lastIndexOf(':'); if (idx < 0) logUnexpectedResponse(); else { let torSocksAddr = tokens[0]; let torSocksPort = parseInt(tokens[1], 10); let torSocksAddr = removeBrackets(addr.substring(0, idx)); let torSocksPort = parseInt(addr.substring(idx + 1), 10); if ((torSocksAddr.length < 1) || isNaN(torSocksPort)) logUnexpectedResponse(); else Loading @@ -2152,6 +2183,7 @@ function torbutton_local_tor_check() } } } } return foundSocksListener; } // torbutton_local_tor_check Loading Loading
src/chrome/content/torbutton.js +45 −13 Original line number Diff line number Diff line Loading @@ -2111,9 +2111,17 @@ function torbutton_local_tor_check() } } function removeBrackets(aStr) { // Remove enclosing square brackets if present. if (aStr.startsWith('[') && aStr.endsWith(']')) return aStr.substr(1, aStr.length - 2); return aStr; } // Sample response: net/listeners/socks="127.0.0.1:9149" "127.0.0.1:9150" // First, check for command argument prefix. resp = resp.toLowerCase(); if (0 != resp.indexOf(kCmdArg + '=')) { logUnexpectedResponse(); return false; Loading @@ -2122,6 +2130,11 @@ function torbutton_local_tor_check() // Retrieve configured proxy settings and check each listener against them. let socksAddr = m_tb_prefs.getCharPref("network.proxy.socks"); let socksPort = m_tb_prefs.getIntPref("network.proxy.socks_port"); let isSocket = socksAddr && (socksAddr.length > 2) && ('/' == socksAddr.charAt(0)); if (!isSocket) socksAddr = removeBrackets(socksAddr); let addrArray = resp.substr(kCmdArg.length + 1).split(' '); let foundSocksListener = false; for (let i = 0; !foundSocksListener && (i < addrArray.length); ++i) Loading @@ -2133,14 +2146,32 @@ function torbutton_local_tor_check() if ((len > 2) && ('"' == addr.charAt(0)) && ('"' == addr.charAt(len - 1))) addr = addr.substring(1, len - 1); // Check against the configured proxy. let tokens = addr.split(':'); if (tokens.length < 2) if (addr.startsWith("unix:")) { if (!isSocket) continue; // Check against the configured UNIX domain socket proxy. We expect to // find "/path" in socksAddr and we ignore socksPort. This matches what // is proposed for Firefox; see: // https://bugzilla.mozilla.org/show_bug.cgi?id=1211567 let path = addr.substring(5); torbutton_log(2, "Tor socks listener (socket): " + path); foundSocksListener = (socksAddr == path); } else if (!isSocket) { // Check against the configured TCP proxy. We expect addr:port where addr // may be an IPv6 address; that is, it may contain colon characters. Also, // we remove enclosing square brackets before comparing addresses because // tor requires them but Firefox does not. let idx = addr.lastIndexOf(':'); if (idx < 0) logUnexpectedResponse(); else { let torSocksAddr = tokens[0]; let torSocksPort = parseInt(tokens[1], 10); let torSocksAddr = removeBrackets(addr.substring(0, idx)); let torSocksPort = parseInt(addr.substring(idx + 1), 10); if ((torSocksAddr.length < 1) || isNaN(torSocksPort)) logUnexpectedResponse(); else Loading @@ -2152,6 +2183,7 @@ function torbutton_local_tor_check() } } } } return foundSocksListener; } // torbutton_local_tor_check Loading