Source code
Revision control
Copy as Markdown
Other Tools
// |jit-test|
load(libdir + "asserts.js");
function assert(x)
{
if (x){
return;
}
throw new Error("assertion failed");
}
function f() { return saveStack(); }
function g() { return f(); }
let stack = g();
let clonebuf = serialize(stack, undefined, {scope: "DifferentProcess"});
let data = clonebuf.clonebuffer;
let boolPattern = String.fromCharCode(0x02, 0x00, 0xFF, 0xFF);
let boolIndex = data.indexOf(boolPattern);
assert(boolIndex >= 0);
let stringPattern = String.fromCharCode(0x04, 0x00, 0xFF, 0xFF);
let stringIndex = data.indexOf(stringPattern, boolIndex + 8);
assert(stringIndex >= 0);
// SCTAG_STRING -> SCTAG_INT32
let corrupted = data.substring(0, stringIndex) +
String.fromCharCode(0x03, 0x00, 0xFF, 0xFF) +
data.substring(stringIndex + 4);
let buf = serialize("dummy");
buf.clonebuffer = corrupted;
assertThrowsInstanceOf(() => deserialize(buf), Error);