byteOffset-validated-against-initial-buffer-length.js (1359B)
1 // Copyright (C) 2024 André Bargull. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 4 /*--- 5 esid: sec-dataview-buffer-byteoffset-bytelength 6 description: > 7 The byteOffset argument is validated against the initial buffer length. 8 info: | 9 DataView ( buffer [ , byteOffset [ , byteLength ] ] ) 10 11 ... 12 3. Let offset be ? ToIndex(byteOffset). 13 ... 14 5. Let bufferByteLength be ArrayBufferByteLength(buffer, seq-cst). 15 6. If offset > bufferByteLength, throw a RangeError exception. 16 ... 17 10. Let O be ? OrdinaryCreateFromConstructor(NewTarget, "%DataView.prototype%", 18 « [[DataView]], [[ViewedArrayBuffer]], [[ByteLength]], [[ByteOffset]] »). 19 ... 20 21 OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] ) 22 23 ... 24 2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto). 25 ... 26 27 features: [Reflect.construct] 28 ---*/ 29 30 let newTarget = Object.defineProperty(function(){}.bind(), "prototype", { 31 get() { 32 throw new Test262Error("GetPrototypeFromConstructor not executed"); 33 } 34 }); 35 36 // Zero length buffer. 37 let ab = new ArrayBuffer(0); 38 39 // Byte offset is larger than the buffer length, which is zero. 40 let byteOffset = 10; 41 42 assert.throws(RangeError, () => { 43 Reflect.construct(DataView, [ab, byteOffset], newTarget); 44 }); 45 46 reportCompare(0, 0);