child_process: improve killSignal validations · nodejs/node@d75fdd9

@@ -22,9 +22,8 @@

2222

'use strict';

23232424

const util = require('util');

25-

const internalUtil = require('internal/util');

25+

const { deprecate, convertToValidSignal } = require('internal/util');

2626

const debug = util.debuglog('child_process');

27-

const constants = process.binding('constants').os.signals;

28272928

const uv = process.binding('uv');

3029

const spawn_sync = process.binding('spawn_sync');

@@ -181,6 +180,8 @@ exports.execFile = function(file /*, args, options, callback*/) {

181180

// Validate maxBuffer, if present.

182181

validateMaxBuffer(options.maxBuffer);

183182183+

options.killSignal = sanitizeKillSignal(options.killSignal);

184+184185

var child = spawn(file, args, {

185186

cwd: options.cwd,

186187

env: options.env,

@@ -332,7 +333,7 @@ exports.execFile = function(file /*, args, options, callback*/) {

332333

return child;

333334

};

334335335-

const _deprecatedCustomFds = internalUtil.deprecate(

336+

const _deprecatedCustomFds = deprecate(

336337

function deprecateCustomFds(options) {

337338

options.stdio = options.customFds.map(function mapCustomFds(fd) {

338339

return fd === -1 ? 'pipe' : fd;

@@ -474,18 +475,6 @@ var spawn = exports.spawn = function(/*file, args, options*/) {

474475

return child;

475476

};

476477477-478-

function lookupSignal(signal) {

479-

if (typeof signal === 'number')

480-

return signal;

481-482-

if (!(signal in constants))

483-

throw new Error('Unknown signal: ' + signal);

484-485-

return constants[signal];

486-

}

487-488-489478

function spawnSync(/*file, args, options*/) {

490479

var opts = normalizeSpawnArguments.apply(null, arguments);

491480

@@ -506,7 +495,7 @@ function spawnSync(/*file, args, options*/) {

506495

options.envPairs = opts.envPairs;

507496508497

// Validate and translate the kill signal, if present.

509-

options.killSignal = validateKillSignal(options.killSignal);

498+

options.killSignal = sanitizeKillSignal(options.killSignal);

510499511500

options.stdio = _validateStdio(options.stdio || 'pipe', true).stdio;

512501

@@ -632,15 +621,10 @@ function validateMaxBuffer(maxBuffer) {

632621

}

633622634623635-

function validateKillSignal(killSignal) {

624+

function sanitizeKillSignal(killSignal) {

636625

if (typeof killSignal === 'string' || typeof killSignal === 'number') {

637-

killSignal = lookupSignal(killSignal);

638-639-

if (killSignal === 0)

640-

throw new RangeError('"killSignal" cannot be 0');

626+

return convertToValidSignal(killSignal);

641627

} else if (killSignal != null) {

642628

throw new TypeError('"killSignal" must be a string or number');

643629

}

644-645-

return killSignal;

646630

}