tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_bug1889130.js (2483B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 /*
      6 *  Test that channels blocks 0.0.0.0 ip address
      7 */
      8 
      9 "use strict";
     10 
     11 const { HttpServer } = ChromeUtils.importESModule(
     12  "resource://testing-common/httpd.sys.mjs"
     13 );
     14 
     15 var { setTimeout } = ChromeUtils.importESModule(
     16  "resource://gre/modules/Timer.sys.mjs"
     17 );
     18 
     19 const ip = "0.0.0.0";
     20 let httpserver = new HttpServer();
     21 
     22 ChromeUtils.defineLazyGetter(this, "URL", function () {
     23  return `http://${ip}:${httpserver.identity.primaryPort}/`;
     24 });
     25 
     26 function plainResponse(metadata, response) {
     27  response.setStatusLine(metadata.httpVersion, 200, "Ok");
     28  response.setHeader("Content-Type", "text/html");
     29  response.setHeader("Content-Length", "2");
     30  response.bodyOutputStream.write("Ok", "Ok".length);
     31 }
     32 
     33 add_setup(function () {
     34  httpserver.registerPathHandler("/", plainResponse);
     35  httpserver._start(-1, ip);
     36  httpserver.identity.setPrimary(
     37    "http",
     38    "0.0.0.0",
     39    httpserver.identity.primaryPort
     40  );
     41 
     42  registerCleanupFunction(async () => {
     43    Services.prefs.setBoolPref("network.socket.ip_addr_any.disabled", true);
     44    await httpserver.stop(() => {});
     45  });
     46 });
     47 
     48 // this test verifies if we allow requests on 0.0.0.0 based on the pref
     49 // network.socket.ip_addr_any.disabled. This is helpful for checking rollback of the bug
     50 add_task(async function test_ipaddrany_allow() {
     51  Services.prefs.setBoolPref("network.socket.ip_addr_any.disabled", false);
     52 
     53  // eslint-disable-next-line mozilla/no-arbitrary-setTimeout
     54  await new Promise(resolve => setTimeout(resolve, 5000));
     55  var chan = NetUtil.newChannel({
     56    uri: URL,
     57    loadUsingSystemPrincipal: true,
     58  });
     59  await new Promise(resolve => {
     60    chan.asyncOpen(new ChannelListener(resolve));
     61  });
     62  Assert.equal(chan.status, Cr.NS_OK);
     63 });
     64 
     65 // this test verifies if we block requests on 0.0.0.0
     66 add_task(async function test_ipaddrany_deny() {
     67  Services.prefs.setBoolPref("network.socket.ip_addr_any.disabled", true);
     68 
     69  // eslint-disable-next-line mozilla/no-arbitrary-setTimeout
     70  await new Promise(resolve => setTimeout(resolve, 5000));
     71 
     72  var chan = NetUtil.newChannel({
     73    uri: URL,
     74    loadUsingSystemPrincipal: true,
     75  });
     76  await new Promise(resolve => {
     77    chan.asyncOpen(new ChannelListener(resolve, null, CL_EXPECT_FAILURE));
     78  });
     79  Assert.equal(chan.status, Cr.NS_ERROR_CONNECTION_REFUSED);
     80 });