js/src/tests/js1_8_5/extensions/clone-forge.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/js/src/tests/js1_8_5/extensions/clone-forge.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,39 @@
     1.4 +// |reftest| skip-if(!xulRuntime.shell)
     1.5 +// -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
     1.6 +// Any copyright is dedicated to the Public Domain.
     1.7 +// http://creativecommons.org/licenses/publicdomain/
     1.8 +
     1.9 +function assertThrows(f) {
    1.10 +    var ok = false;
    1.11 +    try {
    1.12 +        f();
    1.13 +    } catch (exc) {
    1.14 +        ok = true;
    1.15 +    }
    1.16 +    if (!ok)
    1.17 +        throw new TypeError("Assertion failed: " + f + " did not throw as expected");
    1.18 +}
    1.19 +
    1.20 +function byteArray(str) {
    1.21 +    return [ c.charCodeAt(0) for (c of str.split('')) ];
    1.22 +}
    1.23 +
    1.24 +// Don't allow forging bogus Date objects.
    1.25 +var mutated = byteArray(serialize(new Date(NaN)).clonebuffer);
    1.26 +
    1.27 +var a = [1/0, -1/0,
    1.28 +         Number.MIN_VALUE, -Number.MIN_VALUE,
    1.29 +         Math.PI, 1286523948674.5,
    1.30 +         Number.MAX_VALUE, -Number.MAX_VALUE,
    1.31 +         8.64e15 + 1, -(8.64e15 + 1)];
    1.32 +for (var i = 0; i < a.length; i++) {
    1.33 +    var n = a[i];
    1.34 +    var nbuf = serialize(n);
    1.35 +    var data = byteArray(nbuf.clonebuffer);
    1.36 +    for (var j = 0; j < 8; j++)
    1.37 +      mutated[j+8] = data[j];
    1.38 +    nbuf.clonebuffer = String.fromCharCode.apply(null, mutated);
    1.39 +    assertThrows(function () { deserialize(nbuf); });
    1.40 +}
    1.41 +
    1.42 +reportCompare(0, 0);

mercurial