Skip to content

Commit cc18fd9

Browse files
authored
events: refactor to use validateNumber
Need to use validateNumber for checking `TypeError` PR-URL: #45770 Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Filip Skokan <panva.ip@gmail.com>
1 parent a08a1fe commit cc18fd9

File tree

2 files changed

+28
-20
lines changed

2 files changed

+28
-20
lines changed

lib/events.js

+4-12
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ const {
3333
ErrorCaptureStackTrace,
3434
FunctionPrototypeBind,
3535
FunctionPrototypeCall,
36-
NumberIsNaN,
3736
NumberMAX_SAFE_INTEGER,
3837
ObjectDefineProperty,
3938
ObjectDefineProperties,
@@ -69,7 +68,6 @@ const {
6968
codes: {
7069
ERR_INVALID_ARG_TYPE,
7170
ERR_INVALID_THIS,
72-
ERR_OUT_OF_RANGE,
7371
ERR_UNHANDLED_ERROR
7472
},
7573
genericNodeError,
@@ -80,6 +78,7 @@ const {
8078
validateAbortSignal,
8179
validateBoolean,
8280
validateFunction,
81+
validateNumber,
8382
validateString,
8483
} = require('internal/validators');
8584

@@ -278,11 +277,7 @@ ObjectDefineProperty(EventEmitter, 'defaultMaxListeners', {
278277
return defaultMaxListeners;
279278
},
280279
set: function(arg) {
281-
if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {
282-
throw new ERR_OUT_OF_RANGE('defaultMaxListeners',
283-
'a non-negative number',
284-
arg);
285-
}
280+
validateNumber(arg, 'defaultMaxListeners', 0);
286281
defaultMaxListeners = arg;
287282
}
288283
});
@@ -312,8 +307,7 @@ ObjectDefineProperties(EventEmitter, {
312307
*/
313308
EventEmitter.setMaxListeners =
314309
function(n = defaultMaxListeners, ...eventTargets) {
315-
if (typeof n !== 'number' || n < 0 || NumberIsNaN(n))
316-
throw new ERR_OUT_OF_RANGE('n', 'a non-negative number', n);
310+
validateNumber(n, 'setMaxListeners', 0);
317311
if (eventTargets.length === 0) {
318312
defaultMaxListeners = n;
319313
} else {
@@ -409,9 +403,7 @@ function emitUnhandledRejectionOrErr(ee, err, type, args) {
409403
* @returns {EventEmitter}
410404
*/
411405
EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
412-
if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {
413-
throw new ERR_OUT_OF_RANGE('n', 'a non-negative number', n);
414-
}
406+
validateNumber(n, 'setMaxListeners', 0);
415407
this._maxListeners = n;
416408
return this;
417409
};

test/parallel/test-event-emitter-max-listeners.js

+24-8
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,22 @@
2323
const common = require('../common');
2424
const assert = require('assert');
2525
const events = require('events');
26-
const { inspect } = require('util');
2726
const e = new events.EventEmitter();
2827

2928
e.on('maxListeners', common.mustCall());
3029

3130
// Should not corrupt the 'maxListeners' queue.
3231
e.setMaxListeners(42);
3332

34-
const throwsObjs = [NaN, -1, 'and even this'];
33+
const rangeErrorObjs = [NaN, -1];
34+
const typeErrorObj = 'and even this';
3535

36-
for (const obj of throwsObjs) {
36+
for (const obj of rangeErrorObjs) {
3737
assert.throws(
3838
() => e.setMaxListeners(obj),
3939
{
4040
code: 'ERR_OUT_OF_RANGE',
4141
name: 'RangeError',
42-
message: 'The value of "n" is out of range. ' +
43-
`It must be a non-negative number. Received ${inspect(obj)}`,
4442
}
4543
);
4644

@@ -49,22 +47,40 @@ for (const obj of throwsObjs) {
4947
{
5048
code: 'ERR_OUT_OF_RANGE',
5149
name: 'RangeError',
52-
message: 'The value of "defaultMaxListeners" is out of range. ' +
53-
`It must be a non-negative number. Received ${inspect(obj)}`,
5450
}
5551
);
5652
}
5753

54+
assert.throws(
55+
() => e.setMaxListeners(typeErrorObj),
56+
{
57+
code: 'ERR_INVALID_ARG_TYPE',
58+
name: 'TypeError',
59+
}
60+
);
61+
62+
assert.throws(
63+
() => events.defaultMaxListeners = typeErrorObj,
64+
{
65+
code: 'ERR_INVALID_ARG_TYPE',
66+
name: 'TypeError',
67+
}
68+
);
69+
5870
e.emit('maxListeners');
5971

6072
{
6173
const { EventEmitter, defaultMaxListeners } = events;
62-
for (const obj of throwsObjs) {
74+
for (const obj of rangeErrorObjs) {
6375
assert.throws(() => EventEmitter.setMaxListeners(obj), {
6476
code: 'ERR_OUT_OF_RANGE',
6577
});
6678
}
6779

80+
assert.throws(() => EventEmitter.setMaxListeners(typeErrorObj), {
81+
code: 'ERR_INVALID_ARG_TYPE',
82+
});
83+
6884
assert.throws(
6985
() => EventEmitter.setMaxListeners(defaultMaxListeners, 'INVALID_EMITTER'),
7086
{ code: 'ERR_INVALID_ARG_TYPE' }

0 commit comments

Comments
 (0)