// Out-of-bounds accesses are detected when inlining DataView.
function testRead() { const xs = [0x11_22_33_44, 0x55_66_77_88];
let dv = new DataView(new ArrayBuffer(Int32Array.BYTES_PER_ELEMENT * 2));
dv.setInt32(0 * Int32Array.BYTES_PER_ELEMENT, xs[0], true);
dv.setInt32(1 * Int32Array.BYTES_PER_ELEMENT, xs[1], true);
function f(dv, q) { for (let i = 0; i <= 1000; ++i) { // Perform an out-of-bounds read in the last iteration.
let k = (i & 1) * Int32Array.BYTES_PER_ELEMENT + (i === 1000 && q == 2 ? 7 : 0);
let v = dv.getInt32(k, true);
assertEq(v, xs[i & 1]);
}
}
try { for (var i = 0; i <= 2; ++i) {
f(dv, i);
}
} catch (e) {
assertEq(e instanceof RangeError, true, e.message);
assertEq(i, 2);
}
}
testRead();
function testWrite() { const xs = [0x11_22_33_44, 0x55_66_77_88];
let dv = new DataView(new ArrayBuffer(Int32Array.BYTES_PER_ELEMENT * 2));
let ui8 = new Uint8Array(dv.buffer);
function f(dv, q) { for (let i = 0; i <= 1000; ++i) { // Perform an out-of-bounds read in the last iteration.
let k = (i & 1) * Int32Array.BYTES_PER_ELEMENT + (i === 1000 && q == 2 ? 7 : 0);
let x = xs[i & 1];
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.