Skip to content

Commit 39d7303

Browse files
authored
lib: use validators for argument validation
This refactors internal validation helpers in `child_process` to use the common validators in `lib/internal/validators.js` where possible. This improves code consistency and maintainability. PR-URL: #59416 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Daeyeon Jeong <[email protected]> Reviewed-By: Antoine du Hamel <[email protected]> Reviewed-By: Yagiz Nizipli <[email protected]>
1 parent f6d6b91 commit 39d7303

File tree

5 files changed

+39
-39
lines changed

5 files changed

+39
-39
lines changed

lib/child_process.js

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ const {
3333
ArrayPrototypeSort,
3434
ArrayPrototypeSplice,
3535
ArrayPrototypeUnshift,
36-
NumberIsInteger,
3736
ObjectAssign,
3837
ObjectDefineProperty,
3938
ObjectPrototypeHasOwnProperty,
@@ -70,18 +69,19 @@ const {
7069
ERR_CHILD_PROCESS_STDIO_MAXBUFFER,
7170
ERR_INVALID_ARG_TYPE,
7271
ERR_INVALID_ARG_VALUE,
73-
ERR_OUT_OF_RANGE,
7472
},
7573
genericNodeError,
7674
} = require('internal/errors');
7775
const { clearTimeout, setTimeout } = require('timers');
7876
const { getValidatedPath } = require('internal/fs/utils');
7977
const {
80-
isInt32,
8178
validateAbortSignal,
8279
validateArray,
8380
validateBoolean,
8481
validateFunction,
82+
validateInteger,
83+
validateInt32,
84+
validateNumber,
8585
validateObject,
8686
validateString,
8787
} = require('internal/validators');
@@ -603,13 +603,13 @@ function normalizeSpawnArguments(file, args, options) {
603603
}
604604

605605
// Validate the uid, if present.
606-
if (options.uid != null && !isInt32(options.uid)) {
607-
throw new ERR_INVALID_ARG_TYPE('options.uid', 'int32', options.uid);
606+
if (options.uid != null) {
607+
validateInt32(options.uid, 'options.uid');
608608
}
609609

610610
// Validate the gid, if present.
611-
if (options.gid != null && !isInt32(options.gid)) {
612-
throw new ERR_INVALID_ARG_TYPE('options.gid', 'int32', options.gid);
611+
if (options.gid != null) {
612+
validateInt32(options.gid, 'options.gid');
613613
}
614614

615615
// Validate the shell, if present.
@@ -1018,17 +1018,15 @@ function validateArgumentsNullCheck(args, propName) {
10181018

10191019

10201020
function validateTimeout(timeout) {
1021-
if (timeout != null && !(NumberIsInteger(timeout) && timeout >= 0)) {
1022-
throw new ERR_OUT_OF_RANGE('timeout', 'an unsigned integer', timeout);
1021+
if (timeout != null) {
1022+
validateInteger(timeout, 'timeout', 0);
10231023
}
10241024
}
10251025

10261026

10271027
function validateMaxBuffer(maxBuffer) {
1028-
if (maxBuffer != null && !(typeof maxBuffer === 'number' && maxBuffer >= 0)) {
1029-
throw new ERR_OUT_OF_RANGE('options.maxBuffer',
1030-
'a positive number',
1031-
maxBuffer);
1028+
if (maxBuffer != null) {
1029+
validateNumber(maxBuffer, 'options.maxBuffer', 0);
10321030
}
10331031
}
10341032

test/parallel/test-child-process-fork-timeout-kill-signal.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ const { getEventListeners } = require('events');
2727
// Verify timeout verification
2828
throws(() => fork(fixtures.path('child-process-stay-alive-forever.js'), {
2929
timeout: 'badValue',
30-
}), /ERR_OUT_OF_RANGE/);
30+
}), /ERR_INVALID_ARG_TYPE/);
3131

3232
throws(() => fork(fixtures.path('child-process-stay-alive-forever.js'), {
3333
timeout: {},
34-
}), /ERR_OUT_OF_RANGE/);
34+
}), /ERR_INVALID_ARG_TYPE/);
3535
}
3636

3737
{

test/parallel/test-child-process-spawn-timeout-kill-signal.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ const aliveForeverFile = 'child-process-stay-alive-forever.js';
2828
// Verify timeout verification
2929
throws(() => spawn(process.execPath, [fixtures.path(aliveForeverFile)], {
3030
timeout: 'badValue',
31-
}), /ERR_OUT_OF_RANGE/);
31+
}), /ERR_INVALID_ARG_TYPE/);
3232

3333
throws(() => spawn(process.execPath, [fixtures.path(aliveForeverFile)], {
3434
timeout: {},
35-
}), /ERR_OUT_OF_RANGE/);
35+
}), /ERR_INVALID_ARG_TYPE/);
3636
}
3737

3838
{

test/parallel/test-child-process-spawn-typeerror.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ const invalidArgTypeError = {
3939
name: 'TypeError'
4040
};
4141

42+
const invalidRangeError = { code: 'ERR_OUT_OF_RANGE', name: 'RangeError' };
43+
4244
assert.throws(function() {
4345
spawn(invalidcmd, 'this is not an array');
4446
}, invalidArgTypeError);
@@ -77,11 +79,11 @@ assert.throws(function() {
7779

7880
assert.throws(function() {
7981
spawn(cmd, [], { uid: 2 ** 63 });
80-
}, invalidArgTypeError);
82+
}, invalidRangeError);
8183

8284
assert.throws(function() {
8385
spawn(cmd, [], { gid: 2 ** 63 });
84-
}, invalidArgTypeError);
86+
}, invalidRangeError);
8587

8688
// Argument types for combinatorics.
8789
const a = [];

test/parallel/test-child-process-spawnsync-validation-errors.js

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,10 @@ if (!common.isWindows) {
6464
fail('uid', [], invalidArgTypeError);
6565
fail('uid', {}, invalidArgTypeError);
6666
fail('uid', common.mustNotCall(), invalidArgTypeError);
67-
fail('uid', NaN, invalidArgTypeError);
68-
fail('uid', Infinity, invalidArgTypeError);
69-
fail('uid', 3.1, invalidArgTypeError);
70-
fail('uid', -3.1, invalidArgTypeError);
67+
fail('uid', NaN, invalidRangeError);
68+
fail('uid', Infinity, invalidRangeError);
69+
fail('uid', 3.1, invalidRangeError);
70+
fail('uid', -3.1, invalidRangeError);
7171
}
7272
}
7373

@@ -83,10 +83,10 @@ if (!common.isWindows) {
8383
fail('gid', [], invalidArgTypeError);
8484
fail('gid', {}, invalidArgTypeError);
8585
fail('gid', common.mustNotCall(), invalidArgTypeError);
86-
fail('gid', NaN, invalidArgTypeError);
87-
fail('gid', Infinity, invalidArgTypeError);
88-
fail('gid', 3.1, invalidArgTypeError);
89-
fail('gid', -3.1, invalidArgTypeError);
86+
fail('gid', NaN, invalidRangeError);
87+
fail('gid', Infinity, invalidRangeError);
88+
fail('gid', 3.1, invalidRangeError);
89+
fail('gid', -3.1, invalidRangeError);
9090
}
9191
}
9292
}
@@ -152,12 +152,12 @@ if (!common.isWindows) {
152152
pass('timeout', 1);
153153
pass('timeout', 0);
154154
fail('timeout', -1, invalidRangeError);
155-
fail('timeout', true, invalidRangeError);
156-
fail('timeout', false, invalidRangeError);
157-
fail('timeout', __dirname, invalidRangeError);
158-
fail('timeout', [], invalidRangeError);
159-
fail('timeout', {}, invalidRangeError);
160-
fail('timeout', common.mustNotCall(), invalidRangeError);
155+
fail('timeout', true, invalidArgTypeError);
156+
fail('timeout', false, invalidArgTypeError);
157+
fail('timeout', __dirname, invalidArgTypeError);
158+
fail('timeout', [], invalidArgTypeError);
159+
fail('timeout', {}, invalidArgTypeError);
160+
fail('timeout', common.mustNotCall(), invalidArgTypeError);
161161
fail('timeout', NaN, invalidRangeError);
162162
fail('timeout', Infinity, invalidRangeError);
163163
fail('timeout', 3.1, invalidRangeError);
@@ -175,12 +175,12 @@ if (!common.isWindows) {
175175
fail('maxBuffer', -1, invalidRangeError);
176176
fail('maxBuffer', NaN, invalidRangeError);
177177
fail('maxBuffer', -Infinity, invalidRangeError);
178-
fail('maxBuffer', true, invalidRangeError);
179-
fail('maxBuffer', false, invalidRangeError);
180-
fail('maxBuffer', __dirname, invalidRangeError);
181-
fail('maxBuffer', [], invalidRangeError);
182-
fail('maxBuffer', {}, invalidRangeError);
183-
fail('maxBuffer', common.mustNotCall(), invalidRangeError);
178+
fail('maxBuffer', true, invalidArgTypeError);
179+
fail('maxBuffer', false, invalidArgTypeError);
180+
fail('maxBuffer', __dirname, invalidArgTypeError);
181+
fail('maxBuffer', [], invalidArgTypeError);
182+
fail('maxBuffer', {}, invalidArgTypeError);
183+
fail('maxBuffer', common.mustNotCall(), invalidArgTypeError);
184184
}
185185

186186
{

0 commit comments

Comments
 (0)