tor-browser

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

bug1013922.js (1447B)


      1 String.prototype.repeat = function(num) {
      2    return new Array(num + 1).join(this);
      3 }
      4 
      5 function set_to_length(length, frag_size)
      6 {
      7    var fragment = "'" + "x".repeat(frag_size) + "' + ";
      8    var frags = Math.floor((length - 1)/frag_size);
      9    var code = "var x = " + fragment.repeat(frags) + "'" +
     10        "x".repeat(length - frags * frag_size) + "';";
     11 
     12    try {
     13        eval(code);
     14    }
     15    catch(err) {
     16        if (err.message && err.message == "Out of memory")
     17            return -1;
     18        if (err == "out of memory")
     19            return -1;
     20        throw(err); /* Oops, broke something. */
     21    }
     22 
     23    return code.length;
     24 }
     25 
     26 var first_fail;
     27 var first_pass;
     28 var frag_size;
     29 var pass_code_length;
     30 
     31 function search_up()
     32 {
     33    if (set_to_length(first_fail, frag_size) < 0) {
     34        setTimeout(binary_search, 0);
     35        return;
     36    }
     37 
     38    first_fail *= 2;
     39 }
     40 
     41 function binary_search()
     42 {
     43    if (first_fail - first_pass > 1) {
     44        var length = (first_pass + first_fail) / 2;
     45        var code_len = set_to_length(length, frag_size);
     46        if (code_len > 0) {
     47            first_pass = length;
     48            pass_code_length = code_len;
     49        } else
     50            first_fail = length;
     51        setTimeout(binary_search, 0);
     52        return;
     53    }
     54 }
     55 
     56 function run_find_limit()
     57 {
     58    frag_size = 64;
     59    first_fail = 65536; /* A guess */
     60    first_pass = 0;
     61    pass_code_length = 0;
     62 
     63    for (var i=0; i<5; i++)
     64 search_up(0);
     65 }
     66 
     67 run_find_limit();