// Any copyright is dedicated to the Public Domain. // http://creativecommons.org/licenses/publicdomain/ var gTestfile = "stringify-replacer-array-trailing-holes.js"; //----------------------------------------------------------------------------- var BUGNUMBER = 1217069; var summary = "Better/more correct handling for replacer arrays with trailing holes " + "through which inherited elements might appear"; print(BUGNUMBER + ": " + summary); /************** * BEGIN TEST * **************/ var obj = { 0: "hi", 1: "n-nao", 2: "run away!", 3: "bye" }; var s; var replacer = [0, /* 1 */, /* 2 */, /* 3 */, ]; assertEq(JSON.stringify(obj, replacer), '{"0":"hi"}'); var nobj = new Number(0); nobj.toString = () => { replacer[1] = 1; return 0; }; replacer[0] = nobj; assertEq(JSON.stringify(obj, replacer), '{"0":"hi","1":"n-nao"}'); delete replacer[1]; replacer[0] = 0; Object.prototype[0] = 0; Object.prototype[1] = 1; Object.prototype[2] = 2; Object.prototype[3] = 3; assertEq(JSON.stringify(obj, replacer), '{"0":"hi","1":"n-nao","2":"run away!","3":"bye"}'); /******************************************************************************/ if (typeof reportCompare === "function") reportCompare(true, true); print("Tests complete");