tor-browser

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

clone-forge.js (1147B)


      1 // |reftest| skip-if(!xulRuntime.shell)
      2 // -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
      3 // Any copyright is dedicated to the Public Domain.
      4 // http://creativecommons.org/licenses/publicdomain/
      5 
      6 function assertThrows(f) {
      7    var ok = false;
      8    try {
      9        f();
     10    } catch (exc) {
     11        ok = true;
     12    }
     13    if (!ok)
     14        throw new TypeError("Assertion failed: " + f + " did not throw as expected");
     15 }
     16 
     17 function byteArray(str) {
     18    return str.split('').map(c => c.charCodeAt(0));
     19 }
     20 
     21 // Don't allow forging bogus Date objects.
     22 var mutated = byteArray(serialize(new Date(NaN)).clonebuffer);
     23 
     24 var a = [1/0, -1/0,
     25         Number.MIN_VALUE, -Number.MIN_VALUE,
     26         Math.PI, 1286523948674.5,
     27         Number.MAX_VALUE, -Number.MAX_VALUE,
     28         8.64e15 + 1, -(8.64e15 + 1)];
     29 for (var i = 0; i < a.length; i++) {
     30    var n = a[i];
     31    var nbuf = serialize(n);
     32    var data = byteArray(nbuf.clonebuffer);
     33    for (var j = 0; j < 8; j++)
     34      mutated[j+8] = data[j];
     35    nbuf.clonebuffer = String.fromCharCode.apply(null, mutated);
     36    assertThrows(function () { deserialize(nbuf); });
     37 }
     38 
     39 reportCompare(0, 0);