Skip to content

Commit e239ab2

Browse files
committed
[Fix] ES2015+: ValidateTypedArray: proper detachment check and return value
1 parent 48b2d9f commit e239ab2

11 files changed

Lines changed: 93 additions & 86 deletions

.gitattributes

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1124,7 +1124,6 @@
11241124
/2022/UTF16EncodeCodePoint.js spackled linguist-generated=true
11251125
/2022/UTF16SurrogatePairToCodePoint.js spackled linguist-generated=true
11261126
/2022/UnicodeEscape.js spackled linguist-generated=true
1127-
/2022/ValidateTypedArray.js spackled linguist-generated=true
11281127
/2022/WeakRefDeref.js spackled linguist-generated=true
11291128
/2022/WeekDay.js spackled linguist-generated=true
11301129
/2022/WordCharacters.js spackled linguist-generated=true

2015/ValidateTypedArray.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,27 @@ var GetIntrinsic = require('get-intrinsic');
44

55
var $TypeError = GetIntrinsic('%TypeError%');
66

7-
var callBound = require('call-bind/callBound');
8-
var $taSome = callBound('TypedArray.prototype.some', true);
9-
7+
var IsDetachedBuffer = require('./IsDetachedBuffer');
108
var Type = require('./Type');
119

1210
var isTypedArray = require('is-typed-array');
11+
var typedArrayBuffer = require('typed-array-buffer');
1312

1413
// https://262.ecma-international.org/6.0/#sec-validatetypedarray
1514

1615
module.exports = function ValidateTypedArray(O) {
1716
if (Type(O) !== 'Object') {
18-
throw new $TypeError('Assertion failed: O must be an Object');
17+
throw new $TypeError('Assertion failed: `O` must be an Object'); // step 1
1918
}
2019
if (!isTypedArray(O)) {
21-
throw new $TypeError('Assertion failed: O must be a TypedArray');
20+
throw new $TypeError('Assertion failed: `O` must be a Typed Array'); // steps 2 - 3
2221
}
2322

24-
// without `.some` (like in node 0.10), there's no way to check buffer detachment, but also no way to be detached
25-
if ($taSome) {
26-
$taSome(O, function () { return true; });
23+
var buffer = typedArrayBuffer(O); // step 4
24+
25+
if (IsDetachedBuffer(buffer)) {
26+
throw new $TypeError('`O` must be backed by a non-detached buffer'); // step 5
2727
}
2828

29-
return O.buffer;
29+
return buffer; // step 6
3030
};

2016/ValidateTypedArray.js

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

2017/ValidateTypedArray.js

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

2018/ValidateTypedArray.js

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

2019/ValidateTypedArray.js

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

2020/ValidateTypedArray.js

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

2021/ValidateTypedArray.js

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

2022/ValidateTypedArray.js

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,25 @@ var GetIntrinsic = require('get-intrinsic');
44

55
var $TypeError = GetIntrinsic('%TypeError%');
66

7-
var callBound = require('call-bind/callBound');
8-
var $taSome = callBound('TypedArray.prototype.some', true);
9-
7+
var IsDetachedBuffer = require('./IsDetachedBuffer');
108
var Type = require('./Type');
119

1210
var isTypedArray = require('is-typed-array');
11+
var typedArrayBuffer = require('typed-array-buffer');
1312

14-
// https://262.ecma-international.org/6.0/#sec-validatetypedarray
13+
// https://262.ecma-international.org/13.0/#sec-validatetypedarray
1514

1615
module.exports = function ValidateTypedArray(O) {
1716
if (Type(O) !== 'Object') {
18-
throw new $TypeError('Assertion failed: O must be an Object');
17+
throw new $TypeError('Assertion failed: `O` must be an Object'); // step 1
1918
}
2019
if (!isTypedArray(O)) {
21-
throw new $TypeError('Assertion failed: O must be a TypedArray');
20+
throw new $TypeError('Assertion failed: `O` must be a Typed Array'); // steps 1 - 2
2221
}
2322

24-
// without `.some` (like in node 0.10), there's no way to check buffer detachment, but also no way to be detached
25-
if ($taSome) {
26-
$taSome(O, function () { return true; });
27-
}
23+
var buffer = typedArrayBuffer(O); // step 3
2824

29-
return O.buffer;
25+
if (IsDetachedBuffer(buffer)) {
26+
throw new $TypeError('`O` must be backed by a non-detached buffer'); // step 4
27+
}
3028
};

2023/ValidateTypedArray.js

Lines changed: 9 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)