Skip to content

Commit a7c2506

Browse files
committed
[patch] throw on negative set sizes
per tc39/proposal-set-methods#88
1 parent c95890c commit a7c2506

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

aos/GetSetRecord.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
var GetIntrinsic = require('get-intrinsic');
44

5+
var $RangeError = GetIntrinsic('%RangeError%');
56
var $TypeError = GetIntrinsic('%TypeError%');
67

78
var Get = require('es-abstract/2023/Get');
@@ -32,15 +33,19 @@ module.exports = function GetSetRecord(obj) {
3233

3334
var intSize = ToIntegerOrInfinity(numSize); // step 6
3435

35-
var has = Get(obj, 'has'); // step 7
36+
if (intSize < 0) {
37+
throw new $RangeError('set size must be non-negative'); // step 7
38+
}
39+
40+
var has = Get(obj, 'has'); // step 8
3641

3742
if (!IsCallable(has)) {
38-
throw new $TypeError('has is not a function'); // step 8
43+
throw new $TypeError('has is not a function'); // step 9
3944
}
4045

41-
var keys = Get(obj, 'keys'); // step 9
46+
var keys = Get(obj, 'keys'); // step 10
4247
if (!IsCallable(keys)) {
43-
throw new $TypeError('keys is not a function'); // step 10
48+
throw new $TypeError('keys is not a function'); // step 11
4449
}
4550
/* globals StopIteration: false */
4651
if (isSet(obj) && typeof StopIteration === 'object') {
@@ -50,5 +55,5 @@ module.exports = function GetSetRecord(obj) {
5055
};
5156
}
5257

53-
return { '[[Set]]': obj, '[[Size]]': intSize, '[[Has]]': has, '[[Keys]]': keys }; // step 11
58+
return { '[[Set]]': obj, '[[Size]]': intSize, '[[Has]]': has, '[[Keys]]': keys }; // step 12
5459
};

0 commit comments

Comments
 (0)