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);