From 4fc7cd9bc1093160ec0e40b626169134194a51e9 Mon Sep 17 00:00:00 2001 From: cjihrig Date: Mon, 22 Jul 2019 17:44:49 -0400 Subject: [PATCH] lib: support min/max values in validateInteger() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit updates validateInteger() in two ways: - Number.isInteger() is used instead of Number.isSafeInteger(). This ensures that all integer values are supported. - Minimum and maximum values are supported. They default to the min and max safe integer values, but can be customized. PR-URL: https://github.com/nodejs/node/pull/28810 Reviewed-By: Tobias Nießen Reviewed-By: Michaël Zasso Reviewed-By: Richard Lau Reviewed-By: Rich Trott Reviewed-By: Trivikram Kamat --- lib/internal/validators.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/internal/validators.js b/lib/internal/validators.js index 9ee4090e4be2b7..8f5605dad25fd1 100644 --- a/lib/internal/validators.js +++ b/lib/internal/validators.js @@ -13,6 +13,7 @@ const { isArrayBufferView } = require('internal/util/types'); const { signals } = internalBinding('constants').os; +const { MAX_SAFE_INTEGER, MIN_SAFE_INTEGER } = Number; function isInt32(value) { return value === (value | 0); @@ -60,12 +61,16 @@ function parseMode(value, name, def) { throw new ERR_INVALID_ARG_VALUE(name, value, modeDesc); } -const validateInteger = hideStackFrames((value, name) => { - if (typeof value !== 'number') - throw new ERR_INVALID_ARG_TYPE(name, 'number', value); - if (!Number.isSafeInteger(value)) - throw new ERR_OUT_OF_RANGE(name, 'an integer', value); -}); +const validateInteger = hideStackFrames( + (value, name, min = MIN_SAFE_INTEGER, max = MAX_SAFE_INTEGER) => { + if (typeof value !== 'number') + throw new ERR_INVALID_ARG_TYPE(name, 'number', value); + if (!Number.isInteger(value)) + throw new ERR_OUT_OF_RANGE(name, 'an integer', value); + if (value < min || value > max) + throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value); + } +); const validateInt32 = hideStackFrames( (value, name, min = -2147483648, max = 2147483647) => {