Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 String.prototype.repeat = function(num) {
2 return new Array(num + 1).join(this);
3 }
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) + "';";
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 }
23 return code.length;
24 }
26 var first_fail;
27 var first_pass;
28 var frag_size;
29 var pass_code_length;
31 function search_up()
32 {
33 if (set_to_length(first_fail, frag_size) < 0) {
34 setTimeout(binary_search, 0);
35 return;
36 }
38 first_fail *= 2;
39 }
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 }
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;
63 for (var i=0; i<5; i++)
64 search_up(0);
65 }
67 run_find_limit();