Skip to content

Commit

Permalink
[Fix] ES2024+: GetViewByteLength, IsViewOutOfBounds: support en…
Browse files Browse the repository at this point in the history
…gines with only own DV properties
  • Loading branch information
ljharb committed Mar 4, 2024
1 parent 1240c37 commit c5cadea
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 14 deletions.
10 changes: 4 additions & 6 deletions 2024/GetViewByteLength.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,8 @@ var IsViewOutOfBounds = require('./IsViewOutOfBounds');
var isDataViewWithBufferWitnessRecord = require('../helpers/records/data-view-with-buffer-witness-record');

var dataViewBuffer = require('data-view-buffer');
var callBound = require('call-bind/callBound');

var $byteOffset = callBound('DataView.prototype.byteOffset', true);
var $byteLength = callBound('DataView.prototype.byteLength', true);
var dataViewByteLength = require('data-view-byte-length');
var dataViewByteOffset = require('data-view-byte-offset');

// https://262.ecma-international.org/15.0/#sec-getviewbytelength

Expand All @@ -26,7 +24,7 @@ module.exports = function GetViewByteLength(viewRecord) {

var view = viewRecord['[[Object]]']; // step 2

var viewByteLength = $byteLength(view); // view.[[ByteLength]]
var viewByteLength = dataViewByteLength(view); // view.[[ByteLength]]
if (viewByteLength !== 'AUTO') {
return viewByteLength; // step 3
}
Expand All @@ -35,7 +33,7 @@ module.exports = function GetViewByteLength(viewRecord) {
throw new $TypeError('Assertion failed: DataView’s ArrayBuffer is not fixed length'); // step 4
}

var byteOffset = $byteOffset(view); // step 5
var byteOffset = dataViewByteOffset(view); // step 5

var byteLength = viewRecord['[[CachedBufferByteLength]]']; // step 6

Expand Down
13 changes: 5 additions & 8 deletions 2024/IsViewOutOfBounds.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,9 @@ var IsDetachedBuffer = require('./IsDetachedBuffer');

var isDataViewWithBufferWitnessRecord = require('../helpers/records/data-view-with-buffer-witness-record');

var callBound = require('call-bind/callBound');

var $byteOffset = callBound('DataView.prototype.byteOffset', true);
var $byteLength = callBound('DataView.prototype.byteLength', true);

var dataViewBuffer = require('data-view-buffer');
var dataViewByteLength = require('data-view-byte-length');
var dataViewByteOffset = require('data-view-byte-offset');

// https://262.ecma-international.org/15.0/#sec-isviewoutofbounds

Expand All @@ -33,10 +30,10 @@ module.exports = function IsViewOutOfBounds(viewRecord) {
return true; // step 4
}

var byteOffsetStart = $byteOffset(view); // step 5
var byteOffsetStart = dataViewByteOffset(view); // step 5

var dataViewByteLength = $byteLength(view);
var byteOffsetEnd = dataViewByteLength === 'AUTO' ? bufferByteLength : byteOffsetStart + dataViewByteLength; // steps 6 - 7
var dvByteLength = dataViewByteLength(view);
var byteOffsetEnd = dvByteLength === 'AUTO' ? bufferByteLength : byteOffsetStart + dvByteLength; // steps 6 - 7

if (byteOffsetStart > bufferByteLength || byteOffsetEnd > bufferByteLength) {
return true; // step 8
Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@
"available-typed-arrays": "^1.0.7",
"call-bind": "^1.0.7",
"data-view-buffer": "^1.0.1",
"data-view-byte-length": "^1.0.0",
"data-view-byte-offset": "^1.0.0",
"es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
"es-set-tostringtag": "^2.0.3",
Expand Down

0 comments on commit c5cadea

Please sign in to comment.