From 5a25137631379273cfbd98126370e606483f8bba Mon Sep 17 00:00:00 2001 From: yaya Date: Thu, 12 May 2022 15:27:25 +0800 Subject: [PATCH 1/7] lib: optimized validators --- lib/internal/dns/utils.js | 4 +-- lib/internal/validators.js | 25 ++++++++----------- test/parallel/test-crypto-keygen.js | 6 ++--- test/parallel/test-crypto-pbkdf2.js | 6 ++--- test/parallel/test-file-validate-mode-flag.js | 13 +++++----- test/parallel/test-process-setgroups.js | 2 +- test/parallel/test-readline-interface.js | 2 +- .../test-readline-promises-interface.js | 2 +- 8 files changed, 28 insertions(+), 32 deletions(-) diff --git a/lib/internal/dns/utils.js b/lib/internal/dns/utils.js index 58d3eaafcaa6c9..97f887ddfa7e7f 100644 --- a/lib/internal/dns/utils.js +++ b/lib/internal/dns/utils.js @@ -38,13 +38,13 @@ const { function validateTimeout(options) { const { timeout = -1 } = { ...options }; - validateInt32(timeout, 'options.timeout', -1, 2 ** 31 - 1); + validateInt32(timeout, 'options.timeout', -1); return timeout; } function validateTries(options) { const { tries = 4 } = { ...options }; - validateInt32(tries, 'options.tries', 1, 2 ** 31 - 1); + validateInt32(tries, 'options.tries', 1); return tries; } diff --git a/lib/internal/validators.js b/lib/internal/validators.js index e3584aaf2e13f7..0419a7df4c8852 100644 --- a/lib/internal/validators.js +++ b/lib/internal/validators.js @@ -64,7 +64,7 @@ function parseFileMode(value, name, def) { value = NumberParseInt(value, 8); } - validateInt32(value, name, 0, 2 ** 32 - 1); + validateUint32(value, name); return value; } @@ -85,11 +85,8 @@ const validateInt32 = hideStackFrames( if (typeof value !== 'number') { throw new ERR_INVALID_ARG_TYPE(name, 'number', value); } - if (!isInt32(value)) { - if (!NumberIsInteger(value)) { - throw new ERR_OUT_OF_RANGE(name, 'an integer', value); - } - throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value); + if (!NumberIsInteger(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); @@ -101,16 +98,14 @@ const validateUint32 = hideStackFrames((value, name, positive) => { if (typeof value !== 'number') { throw new ERR_INVALID_ARG_TYPE(name, 'number', value); } - if (!isUint32(value)) { - if (!NumberIsInteger(value)) { - throw new ERR_OUT_OF_RANGE(name, 'an integer', value); - } - const min = positive ? 1 : 0; - // 2 ** 32 === 4294967296 - throw new ERR_OUT_OF_RANGE(name, `>= ${min} && < 4294967296`, value); + if (!NumberIsInteger(value)) { + throw new ERR_OUT_OF_RANGE(name, 'an integer', value); } - if (positive && value === 0) { - throw new ERR_OUT_OF_RANGE(name, '>= 1 && < 4294967296', value); + const min = positive ? 1 : 0; + // 2 ** 32 === 4294967296 + const max = 4294967295; + if (value < min || value > max) { + throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value); } }); diff --git a/test/parallel/test-crypto-keygen.js b/test/parallel/test-crypto-keygen.js index 6db4bf1f957ce7..b41be26af42e1d 100644 --- a/test/parallel/test-crypto-keygen.js +++ b/test/parallel/test-crypto-keygen.js @@ -1172,7 +1172,7 @@ function addNumericalSeparator(val) { code: 'ERR_OUT_OF_RANGE', message: 'The value of "options.modulusLength" is out of range. ' + - 'It must be >= 0 && < 4294967296. ' + + 'It must be >= 0 && <= 4294967295. ' + `Received ${addNumericalSeparator(modulusLength)}` }); } @@ -1216,7 +1216,7 @@ function addNumericalSeparator(val) { code: 'ERR_OUT_OF_RANGE', message: 'The value of "options.publicExponent" is out of range. ' + - 'It must be >= 0 && < 4294967296. ' + + 'It must be >= 0 && <= 4294967295. ' + `Received ${addNumericalSeparator(publicExponent)}` }); } @@ -1260,7 +1260,7 @@ function addNumericalSeparator(val) { code: 'ERR_OUT_OF_RANGE', message: 'The value of "options.modulusLength" is out of range. ' + - 'It must be >= 0 && < 4294967296. ' + + 'It must be >= 0 && <= 4294967295. ' + `Received ${addNumericalSeparator(modulusLength)}` }); } diff --git a/test/parallel/test-crypto-pbkdf2.js b/test/parallel/test-crypto-pbkdf2.js index a62cd97c19318a..afc9a8469e7a34 100644 --- a/test/parallel/test-crypto-pbkdf2.js +++ b/test/parallel/test-crypto-pbkdf2.js @@ -70,7 +70,7 @@ for (const iterations of [-1, 0]) { code: 'ERR_OUT_OF_RANGE', name: 'RangeError', message: 'The value of "iterations" is out of range. ' + - `It must be >= 1 && < 4294967296. Received ${iterations}` + `It must be >= 1 && <= 4294967295. Received ${iterations}` } ); } @@ -108,8 +108,8 @@ for (const iterations of [-1, 0]) { }, { code: 'ERR_OUT_OF_RANGE', name: 'RangeError', - message: 'The value of "keylen" is out of range. It must be >= 0 && < ' + - `4294967296. Received ${input === -1 ? '-1' : '4_294_967_297'}` + message: 'The value of "keylen" is out of range. It must be >= 0 && <=' + + ` 4294967295. Received ${input === -1 ? '-1' : '4_294_967_297'}` }); }); diff --git a/test/parallel/test-file-validate-mode-flag.js b/test/parallel/test-file-validate-mode-flag.js index 2ee0716de6e18f..24cb1269f8be78 100644 --- a/test/parallel/test-file-validate-mode-flag.js +++ b/test/parallel/test-file-validate-mode-flag.js @@ -13,27 +13,28 @@ const { } = require('fs'); // These should throw, not crash. +const invalid = 4294967296; -assert.throws(() => open(__filename, 2176057344, common.mustNotCall()), { +assert.throws(() => open(__filename, invalid, common.mustNotCall()), { code: 'ERR_OUT_OF_RANGE' }); -assert.throws(() => open(__filename, 0, 2176057344, common.mustNotCall()), { +assert.throws(() => open(__filename, 0, invalid, common.mustNotCall()), { code: 'ERR_OUT_OF_RANGE' }); -assert.throws(() => openSync(__filename, 2176057344), { +assert.throws(() => openSync(__filename, invalid), { code: 'ERR_OUT_OF_RANGE' }); -assert.throws(() => openSync(__filename, 0, 2176057344), { +assert.throws(() => openSync(__filename, 0, invalid), { code: 'ERR_OUT_OF_RANGE' }); -assert.rejects(openPromise(__filename, 2176057344), { +assert.rejects(openPromise(__filename, invalid), { code: 'ERR_OUT_OF_RANGE' }); -assert.rejects(openPromise(__filename, 0, 2176057344), { +assert.rejects(openPromise(__filename, 0, invalid), { code: 'ERR_OUT_OF_RANGE' }); diff --git a/test/parallel/test-process-setgroups.js b/test/parallel/test-process-setgroups.js index 2e04c8a1756383..609d14367e17c7 100644 --- a/test/parallel/test-process-setgroups.js +++ b/test/parallel/test-process-setgroups.js @@ -30,7 +30,7 @@ assert.throws( code: 'ERR_OUT_OF_RANGE', name: 'RangeError', message: 'The value of "groups[1]" is out of range. ' + - 'It must be >= 0 && < 4294967296. Received -1' + 'It must be >= 0 && <= 4294967295. Received -1' } ); diff --git a/test/parallel/test-readline-interface.js b/test/parallel/test-readline-interface.js index ad7eee7c42e485..94f5aa684feb29 100644 --- a/test/parallel/test-readline-interface.js +++ b/test/parallel/test-readline-interface.js @@ -133,7 +133,7 @@ function assertCursorRowsAndCols(rli, rows, cols) { }), { message: 'The value of "tabSize" is out of range. ' + - 'It must be >= 1 && < 4294967296. Received 0', + 'It must be >= 1 && <= 4294967295. Received 0', code: 'ERR_OUT_OF_RANGE' } ); diff --git a/test/parallel/test-readline-promises-interface.js b/test/parallel/test-readline-promises-interface.js index cf0543d7d255f7..f35caa358f39c6 100644 --- a/test/parallel/test-readline-promises-interface.js +++ b/test/parallel/test-readline-promises-interface.js @@ -123,7 +123,7 @@ function assertCursorRowsAndCols(rli, rows, cols) { }), { message: 'The value of "tabSize" is out of range. ' + - 'It must be >= 1 && < 4294967296. Received 0', + 'It must be >= 1 && <= 4294967295. Received 0', code: 'ERR_OUT_OF_RANGE' } ); From 6a3236c19c947bee90a4c4a79267e8bd1b723575 Mon Sep 17 00:00:00 2001 From: mawaregetsuka <33221990+mawaregetsuka@users.noreply.github.com> Date: Fri, 13 May 2022 15:11:53 +0800 Subject: [PATCH 2/7] Update lib/internal/validators.js Co-authored-by: Antoine du Hamel --- lib/internal/validators.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/internal/validators.js b/lib/internal/validators.js index 0419a7df4c8852..426e68b4706a88 100644 --- a/lib/internal/validators.js +++ b/lib/internal/validators.js @@ -103,7 +103,7 @@ const validateUint32 = hideStackFrames((value, name, positive) => { } const min = positive ? 1 : 0; // 2 ** 32 === 4294967296 - const max = 4294967295; + const max = 4_294_967_295; if (value < min || value > max) { throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value); } From eb24ca189387ec0fec96994be7cc71b37b1ac267 Mon Sep 17 00:00:00 2001 From: yaya Date: Wed, 18 May 2022 17:10:20 +0800 Subject: [PATCH 3/7] rerun test From 84ed1554a09efd2c83f00ddff27f6c505786479c Mon Sep 17 00:00:00 2001 From: mawaregetsuka <33221990+mawaregetsuka@users.noreply.github.com> Date: Sun, 22 May 2022 03:31:23 +0800 Subject: [PATCH 4/7] Update test/parallel/test-file-validate-mode-flag.js Co-authored-by: Antoine du Hamel --- test/parallel/test-file-validate-mode-flag.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-file-validate-mode-flag.js b/test/parallel/test-file-validate-mode-flag.js index 24cb1269f8be78..bb9871ae318d5f 100644 --- a/test/parallel/test-file-validate-mode-flag.js +++ b/test/parallel/test-file-validate-mode-flag.js @@ -13,7 +13,7 @@ const { } = require('fs'); // These should throw, not crash. -const invalid = 4294967296; +const invalid = 4_294_967_296; assert.throws(() => open(__filename, invalid, common.mustNotCall()), { code: 'ERR_OUT_OF_RANGE' From 88806545d06d0d9d2eac0daccf7b7874fbb6c52a Mon Sep 17 00:00:00 2001 From: yaya Date: Sun, 22 May 2022 13:54:52 +0800 Subject: [PATCH 5/7] remove err.message --- test/parallel/test-crypto-keygen.js | 12 ------------ test/parallel/test-crypto-pbkdf2.js | 4 ---- test/parallel/test-process-setgroups.js | 2 -- test/parallel/test-readline-interface.js | 6 +----- test/parallel/test-readline-promises-interface.js | 6 +----- 5 files changed, 2 insertions(+), 28 deletions(-) diff --git a/test/parallel/test-crypto-keygen.js b/test/parallel/test-crypto-keygen.js index b41be26af42e1d..7907e9c8b6c680 100644 --- a/test/parallel/test-crypto-keygen.js +++ b/test/parallel/test-crypto-keygen.js @@ -1170,10 +1170,6 @@ function addNumericalSeparator(val) { }, common.mustNotCall()), { name: 'RangeError', code: 'ERR_OUT_OF_RANGE', - message: - 'The value of "options.modulusLength" is out of range. ' + - 'It must be >= 0 && <= 4294967295. ' + - `Received ${addNumericalSeparator(modulusLength)}` }); } @@ -1214,10 +1210,6 @@ function addNumericalSeparator(val) { }, common.mustNotCall()), { name: 'RangeError', code: 'ERR_OUT_OF_RANGE', - message: - 'The value of "options.publicExponent" is out of range. ' + - 'It must be >= 0 && <= 4294967295. ' + - `Received ${addNumericalSeparator(publicExponent)}` }); } } @@ -1244,10 +1236,6 @@ function addNumericalSeparator(val) { }, common.mustNotCall()), { name: 'RangeError', code: 'ERR_OUT_OF_RANGE', - message: - 'The value of "options.modulusLength" is out of range. ' + - 'It must be an integer. ' + - `Received ${inspect(modulusLength)}` }); } diff --git a/test/parallel/test-crypto-pbkdf2.js b/test/parallel/test-crypto-pbkdf2.js index afc9a8469e7a34..c4dbedcb59160f 100644 --- a/test/parallel/test-crypto-pbkdf2.js +++ b/test/parallel/test-crypto-pbkdf2.js @@ -69,8 +69,6 @@ for (const iterations of [-1, 0]) { { code: 'ERR_OUT_OF_RANGE', name: 'RangeError', - message: 'The value of "iterations" is out of range. ' + - `It must be >= 1 && <= 4294967295. Received ${iterations}` } ); } @@ -108,8 +106,6 @@ for (const iterations of [-1, 0]) { }, { code: 'ERR_OUT_OF_RANGE', name: 'RangeError', - message: 'The value of "keylen" is out of range. It must be >= 0 && <=' + - ` 4294967295. Received ${input === -1 ? '-1' : '4_294_967_297'}` }); }); diff --git a/test/parallel/test-process-setgroups.js b/test/parallel/test-process-setgroups.js index 609d14367e17c7..9506f24a5f3447 100644 --- a/test/parallel/test-process-setgroups.js +++ b/test/parallel/test-process-setgroups.js @@ -29,8 +29,6 @@ assert.throws( { code: 'ERR_OUT_OF_RANGE', name: 'RangeError', - message: 'The value of "groups[1]" is out of range. ' + - 'It must be >= 0 && <= 4294967295. Received -1' } ); diff --git a/test/parallel/test-readline-interface.js b/test/parallel/test-readline-interface.js index 94f5aa684feb29..846db3600acaf5 100644 --- a/test/parallel/test-readline-interface.js +++ b/test/parallel/test-readline-interface.js @@ -131,11 +131,7 @@ function assertCursorRowsAndCols(rli, rows, cols) { input, tabSize: 0 }), - { - message: 'The value of "tabSize" is out of range. ' + - 'It must be >= 1 && <= 4294967295. Received 0', - code: 'ERR_OUT_OF_RANGE' - } + { code: 'ERR_OUT_OF_RANGE' } ); assert.throws( diff --git a/test/parallel/test-readline-promises-interface.js b/test/parallel/test-readline-promises-interface.js index f35caa358f39c6..bd7eb56b2165c6 100644 --- a/test/parallel/test-readline-promises-interface.js +++ b/test/parallel/test-readline-promises-interface.js @@ -121,11 +121,7 @@ function assertCursorRowsAndCols(rli, rows, cols) { input, tabSize: 0 }), - { - message: 'The value of "tabSize" is out of range. ' + - 'It must be >= 1 && <= 4294967295. Received 0', - code: 'ERR_OUT_OF_RANGE' - } + { code: 'ERR_OUT_OF_RANGE' } ); assert.throws( From 22499a3d581866e75c062292bcf1fe7f054eb71e Mon Sep 17 00:00:00 2001 From: yaya Date: Sun, 22 May 2022 17:33:37 +0800 Subject: [PATCH 6/7] remove err.message --- test/parallel/test-crypto-keygen.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/test/parallel/test-crypto-keygen.js b/test/parallel/test-crypto-keygen.js index 7907e9c8b6c680..57748b8d3c6735 100644 --- a/test/parallel/test-crypto-keygen.js +++ b/test/parallel/test-crypto-keygen.js @@ -1246,10 +1246,6 @@ function addNumericalSeparator(val) { }, common.mustNotCall()), { name: 'RangeError', code: 'ERR_OUT_OF_RANGE', - message: - 'The value of "options.modulusLength" is out of range. ' + - 'It must be >= 0 && <= 4294967295. ' + - `Received ${addNumericalSeparator(modulusLength)}` }); } From 7bc50713a88a97b3d4e8272166ceb6155828a217 Mon Sep 17 00:00:00 2001 From: yaya Date: Sun, 22 May 2022 17:43:56 +0800 Subject: [PATCH 7/7] remove redundant --- test/parallel/test-crypto-keygen.js | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/test/parallel/test-crypto-keygen.js b/test/parallel/test-crypto-keygen.js index 57748b8d3c6735..a15bb2777ccb44 100644 --- a/test/parallel/test-crypto-keygen.js +++ b/test/parallel/test-crypto-keygen.js @@ -1122,18 +1122,6 @@ const sec1EncExp = (cipher) => getRegExpForPEM('EC PRIVATE KEY', cipher); } } -function addNumericalSeparator(val) { - val = String(val); - let res = ''; - let i = val.length; - const start = val[0] === '-' ? 1 : 0; - for (; i >= start + 4; i -= 3) { - res = `_${val.slice(i - 3, i)}${res}`; - } - return `${val.slice(0, i)}${res}`; -} - - // Test RSA parameters. { // Test invalid modulus lengths. (non-number)