lib: support ranges in validateInt32()
This commit adds minimum and maximum value checks to the validateInt32() validator. PR-URL: https://github.com/nodejs/node/pull/20588 Fixes: https://github.com/nodejs/node/issues/20498 Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Weijia Wang <starkwang@126.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
This commit is contained in:
parent
a7fa0dba88
commit
1c1b8ae409
@ -48,7 +48,8 @@ function validateAndMaskMode(value, name, def) {
|
||||
throw new ERR_INVALID_ARG_VALUE(name, value, modeDesc);
|
||||
}
|
||||
|
||||
function validateInt32(value, name) {
|
||||
function validateInt32(value, name, min = -2147483648, max = 2147483647) {
|
||||
// The defaults for min and max correspond to the limits of 32-bit integers.
|
||||
if (!isInt32(value)) {
|
||||
let err;
|
||||
if (typeof value !== 'number') {
|
||||
@ -56,11 +57,14 @@ function validateInt32(value, name) {
|
||||
} else if (!Number.isInteger(value)) {
|
||||
err = new ERR_OUT_OF_RANGE(name, 'an integer', value);
|
||||
} else {
|
||||
// 2 ** 31 === 2147483648
|
||||
err = new ERR_OUT_OF_RANGE(name, '> -2147483649 && < 2147483648', value);
|
||||
err = new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value);
|
||||
}
|
||||
Error.captureStackTrace(err, validateInt32);
|
||||
throw err;
|
||||
} else if (value < min || value > max) {
|
||||
const err = new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value);
|
||||
Error.captureStackTrace(err, validateInt32);
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -210,7 +210,7 @@ function testFtruncate(cb) {
|
||||
code: 'ERR_OUT_OF_RANGE',
|
||||
name: 'RangeError [ERR_OUT_OF_RANGE]',
|
||||
message: 'The value of "len" is out of range. It must be ' +
|
||||
`> -2147483649 && < 2147483648. Received ${input}`
|
||||
`>= -2147483648 && <= 2147483647. Received ${input}`
|
||||
}
|
||||
);
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user