diff --git a/lib/internal/validators.js b/lib/internal/validators.js index b07eebfbd8b1a0..e3584aaf2e13f7 100644 --- a/lib/internal/validators.js +++ b/lib/internal/validators.js @@ -82,10 +82,10 @@ const validateInteger = hideStackFrames( const validateInt32 = hideStackFrames( (value, name, min = -2147483648, max = 2147483647) => { // The defaults for min and max correspond to the limits of 32-bit integers. + if (typeof value !== 'number') { + throw new ERR_INVALID_ARG_TYPE(name, 'number', value); + } if (!isInt32(value)) { - if (typeof value !== 'number') { - throw new ERR_INVALID_ARG_TYPE(name, 'number', value); - } if (!NumberIsInteger(value)) { throw new ERR_OUT_OF_RANGE(name, 'an integer', value); } @@ -98,10 +98,10 @@ const validateInt32 = hideStackFrames( ); const validateUint32 = hideStackFrames((value, name, positive) => { + if (typeof value !== 'number') { + throw new ERR_INVALID_ARG_TYPE(name, 'number', value); + } if (!isUint32(value)) { - if (typeof value !== 'number') { - throw new ERR_INVALID_ARG_TYPE(name, 'number', value); - } if (!NumberIsInteger(value)) { throw new ERR_OUT_OF_RANGE(name, 'an integer', value); } diff --git a/test/parallel/test-validators.js b/test/parallel/test-validators.js index 6b0d49c6997a65..0bba9d13b20bf0 100644 --- a/test/parallel/test-validators.js +++ b/test/parallel/test-validators.js @@ -10,6 +10,8 @@ const { validateNumber, validateObject, validateString, + validateInt32, + validateUint32, } = require('internal/validators'); const { MAX_SAFE_INTEGER, MIN_SAFE_INTEGER } = Number; const outOfRangeError = { @@ -41,6 +43,34 @@ const invalidArgValueError = { // validateInteger() works with unsafe integers. validateInteger(MAX_SAFE_INTEGER + 1, 'foo', 0, MAX_SAFE_INTEGER + 1); validateInteger(MIN_SAFE_INTEGER - 1, 'foo', MIN_SAFE_INTEGER - 1); + + // validateInt32() and validateUint32() + [ + Symbol(), 1n, {}, [], false, true, undefined, null, () => {}, '', '1', + ].forEach((val) => assert.throws(() => validateInt32(val, 'name'), { + code: 'ERR_INVALID_ARG_TYPE' + })); + [ + 2147483647 + 1, -2147483648 - 1, NaN, + ].forEach((val) => assert.throws(() => validateInt32(val, 'name'), { + code: 'ERR_OUT_OF_RANGE' + })); + [ + 0, 1, -1, + ].forEach((val) => validateInt32(val, 'name')); + [ + Symbol(), 1n, {}, [], false, true, undefined, null, () => {}, '', '1', + ].forEach((val) => assert.throws(() => validateUint32(val, 'name'), { + code: 'ERR_INVALID_ARG_TYPE' + })); + [ + 4294967296, -1, NaN, + ].forEach((val) => assert.throws(() => validateUint32(val, 'name'), { + code: 'ERR_OUT_OF_RANGE' + })); + [ + 0, 1, + ].forEach((val) => validateUint32(val, 'name')); } {