Skip to content

Commit

Permalink
RangeError on NaN in .drop and .take
Browse files Browse the repository at this point in the history
  • Loading branch information
zloirock committed Jul 24, 2022
1 parent d078d00 commit 4540e90
Show file tree
Hide file tree
Showing 13 changed files with 27 additions and 8 deletions.
7 changes: 7 additions & 0 deletions packages/core-js/internals/not-a-nan.js
@@ -0,0 +1,7 @@
var $RangeError = RangeError;

module.exports = function (it) {
// eslint-disable-next-line no-self-compare -- NaN check
if (it === it) return it;
throw $RangeError('NaN is not allowed');
};
3 changes: 2 additions & 1 deletion packages/core-js/modules/esnext.async-iterator.drop.js
Expand Up @@ -4,6 +4,7 @@ var $ = require('../internals/export');
var apply = require('../internals/function-apply');
var anObject = require('../internals/an-object');
var getIteratorDirect = require('../internals/get-iterator-direct');
var notANaN = require('../internals/not-a-nan');
var toPositiveInteger = require('../internals/to-positive-integer');
var createAsyncIteratorProxy = require('../internals/async-iterator-create-proxy');

Expand Down Expand Up @@ -36,7 +37,7 @@ var AsyncIteratorProxy = createAsyncIteratorProxy(function (Promise, args) {
$({ target: 'AsyncIterator', proto: true, real: true, forced: true }, {
drop: function drop(limit) {
return new AsyncIteratorProxy(getIteratorDirect(this), {
remaining: toPositiveInteger(limit)
remaining: toPositiveInteger(notANaN(+limit))
});
}
});
3 changes: 2 additions & 1 deletion packages/core-js/modules/esnext.async-iterator.take.js
Expand Up @@ -4,6 +4,7 @@ var $ = require('../internals/export');
var apply = require('../internals/function-apply');
var call = require('../internals/function-call');
var getIteratorDirect = require('../internals/get-iterator-direct');
var notANaN = require('../internals/not-a-nan');
var toPositiveInteger = require('../internals/to-positive-integer');
var createAsyncIteratorProxy = require('../internals/async-iterator-create-proxy');

Expand All @@ -26,7 +27,7 @@ var AsyncIteratorProxy = createAsyncIteratorProxy(function (Promise, args) {
$({ target: 'AsyncIterator', proto: true, real: true, forced: true }, {
take: function take(limit) {
return new AsyncIteratorProxy(getIteratorDirect(this), {
remaining: toPositiveInteger(limit)
remaining: toPositiveInteger(notANaN(+limit))
});
}
});
3 changes: 2 additions & 1 deletion packages/core-js/modules/esnext.iterator.drop.js
Expand Up @@ -5,6 +5,7 @@ var apply = require('../internals/function-apply');
var call = require('../internals/function-call');
var anObject = require('../internals/an-object');
var getIteratorDirect = require('../internals/get-iterator-direct');
var notANaN = require('../internals/not-a-nan');
var toPositiveInteger = require('../internals/to-positive-integer');
var createIteratorProxy = require('../internals/iterator-create-proxy');

Expand All @@ -26,7 +27,7 @@ var IteratorProxy = createIteratorProxy(function (args) {
$({ target: 'Iterator', proto: true, real: true, forced: true }, {
drop: function drop(limit) {
return new IteratorProxy(getIteratorDirect(this), {
remaining: toPositiveInteger(limit)
remaining: toPositiveInteger(notANaN(+limit))
});
}
});
3 changes: 2 additions & 1 deletion packages/core-js/modules/esnext.iterator.take.js
Expand Up @@ -4,6 +4,7 @@ var $ = require('../internals/export');
var apply = require('../internals/function-apply');
var anObject = require('../internals/an-object');
var getIteratorDirect = require('../internals/get-iterator-direct');
var notANaN = require('../internals/not-a-nan');
var toPositiveInteger = require('../internals/to-positive-integer');
var createIteratorProxy = require('../internals/iterator-create-proxy');
var iteratorClose = require('../internals/iterator-close');
Expand All @@ -22,7 +23,7 @@ var IteratorProxy = createIteratorProxy(function (args) {
$({ target: 'Iterator', proto: true, real: true, forced: true }, {
take: function take(limit) {
return new IteratorProxy(getIteratorDirect(this), {
remaining: toPositiveInteger(limit)
remaining: toPositiveInteger(notANaN(+limit))
});
}
});
3 changes: 2 additions & 1 deletion tests/pure/esnext.async-iterator.drop.js
Expand Up @@ -3,7 +3,7 @@ import { createIterator } from '../helpers/helpers';
import AsyncIterator from 'core-js-pure/full/async-iterator';

QUnit.test('AsyncIterator#drop', assert => {
assert.expect(12);
assert.expect(13);
const async = assert.async();
const { drop } = AsyncIterator.prototype;

Expand All @@ -29,4 +29,5 @@ QUnit.test('AsyncIterator#drop', assert => {
assert.throws(() => drop.call({}, 1), TypeError);
assert.throws(() => drop.call([], 1), TypeError);
assert.throws(() => drop.call(createIterator([1, 2, 3]), -1), RangeError, 'negative');
assert.throws(() => drop.call(createIterator([1, 2, 3]), NaN), RangeError, 'NaN');
});
3 changes: 2 additions & 1 deletion tests/pure/esnext.async-iterator.take.js
Expand Up @@ -3,7 +3,7 @@ import { createIterator } from '../helpers/helpers';
import AsyncIterator from 'core-js-pure/full/async-iterator';

QUnit.test('AsyncIterator#take', assert => {
assert.expect(12);
assert.expect(13);
const async = assert.async();
const { take } = AsyncIterator.prototype;

Expand All @@ -29,4 +29,5 @@ QUnit.test('AsyncIterator#take', assert => {
assert.throws(() => take.call({}, 1), TypeError);
assert.throws(() => take.call([], 1), TypeError);
assert.throws(() => take.call(createIterator([1, 2, 3]), -1), RangeError, 'negative');
assert.throws(() => take.call(createIterator([1, 2, 3]), NaN), RangeError, 'NaN');
});
1 change: 1 addition & 0 deletions tests/pure/esnext.iterator.drop.js
Expand Up @@ -19,4 +19,5 @@ QUnit.test('Iterator#drop', assert => {
assert.throws(() => drop.call({}, 1), TypeError);
assert.throws(() => drop.call([], 1), TypeError);
assert.throws(() => drop.call(createIterator([1, 2, 3]), -1), RangeError, 'negative');
assert.throws(() => drop.call(createIterator([1, 2, 3]), NaN), RangeError, 'NaN');
});
1 change: 1 addition & 0 deletions tests/pure/esnext.iterator.take.js
Expand Up @@ -19,4 +19,5 @@ QUnit.test('Iterator#take', assert => {
assert.throws(() => take.call({}, 1), TypeError);
assert.throws(() => take.call([], 1), TypeError);
assert.throws(() => take.call(createIterator([1, 2, 3]), -1), RangeError, 'negative');
assert.throws(() => take.call(createIterator([1, 2, 3]), NaN), RangeError, 'NaN');
});
3 changes: 2 additions & 1 deletion tests/tests/esnext.async-iterator.drop.js
@@ -1,7 +1,7 @@
import { createIterator } from '../helpers/helpers';

QUnit.test('AsyncIterator#drop', assert => {
assert.expect(14);
assert.expect(15);
const async = assert.async();
const { drop } = AsyncIterator.prototype;

Expand Down Expand Up @@ -29,4 +29,5 @@ QUnit.test('AsyncIterator#drop', assert => {
assert.throws(() => drop.call({}, 1), TypeError);
assert.throws(() => drop.call([], 1), TypeError);
assert.throws(() => drop.call(createIterator([1, 2, 3]), -1), RangeError, 'negative');
assert.throws(() => drop.call(createIterator([1, 2, 3]), NaN), RangeError, 'NaN');
});
3 changes: 2 additions & 1 deletion tests/tests/esnext.async-iterator.take.js
@@ -1,7 +1,7 @@
import { createIterator } from '../helpers/helpers';

QUnit.test('AsyncIterator#take', assert => {
assert.expect(14);
assert.expect(15);
const async = assert.async();
const { take } = AsyncIterator.prototype;

Expand Down Expand Up @@ -29,4 +29,5 @@ QUnit.test('AsyncIterator#take', assert => {
assert.throws(() => take.call({}, 1), TypeError);
assert.throws(() => take.call([], 1), TypeError);
assert.throws(() => take.call(createIterator([1, 2, 3]), -1), RangeError, 'negative');
assert.throws(() => take.call(createIterator([1, 2, 3]), NaN), RangeError, 'NaN');
});
1 change: 1 addition & 0 deletions tests/tests/esnext.iterator.drop.js
Expand Up @@ -19,4 +19,5 @@ QUnit.test('Iterator#drop', assert => {
assert.throws(() => drop.call({}, 1), TypeError);
assert.throws(() => drop.call([], 1), TypeError);
assert.throws(() => drop.call(createIterator([1, 2, 3]), -1), RangeError, 'negative');
assert.throws(() => drop.call(createIterator([1, 2, 3]), NaN), RangeError, 'NaN');
});
1 change: 1 addition & 0 deletions tests/tests/esnext.iterator.take.js
Expand Up @@ -19,4 +19,5 @@ QUnit.test('Iterator#take', assert => {
assert.throws(() => take.call({}, 1), TypeError);
assert.throws(() => take.call([], 1), TypeError);
assert.throws(() => take.call(createIterator([1, 2, 3]), -1), RangeError, 'negative');
assert.throws(() => take.call(createIterator([1, 2, 3]), NaN), RangeError, 'NaN');
});

0 comments on commit 4540e90

Please sign in to comment.