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);
|
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)) {
|
if (!isInt32(value)) {
|
||||||
let err;
|
let err;
|
||||||
if (typeof value !== 'number') {
|
if (typeof value !== 'number') {
|
||||||
@ -56,11 +57,14 @@ function validateInt32(value, name) {
|
|||||||
} else if (!Number.isInteger(value)) {
|
} else if (!Number.isInteger(value)) {
|
||||||
err = new ERR_OUT_OF_RANGE(name, 'an integer', value);
|
err = new ERR_OUT_OF_RANGE(name, 'an integer', value);
|
||||||
} else {
|
} else {
|
||||||
// 2 ** 31 === 2147483648
|
err = new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value);
|
||||||
err = new ERR_OUT_OF_RANGE(name, '> -2147483649 && < 2147483648', value);
|
|
||||||
}
|
}
|
||||||
Error.captureStackTrace(err, validateInt32);
|
Error.captureStackTrace(err, validateInt32);
|
||||||
throw err;
|
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',
|
code: 'ERR_OUT_OF_RANGE',
|
||||||
name: 'RangeError [ERR_OUT_OF_RANGE]',
|
name: 'RangeError [ERR_OUT_OF_RANGE]',
|
||||||
message: 'The value of "len" is out of range. It must be ' +
|
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