diff options
Diffstat (limited to 'lib/child_process.js')
-rw-r--r-- | lib/child_process.js | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/lib/child_process.js b/lib/child_process.js index e18b65435..11a5e9f68 100644 --- a/lib/child_process.js +++ b/lib/child_process.js @@ -560,6 +560,8 @@ exports.fork = function(modulePath /*, args, options*/) { if (util.isArray(arguments[1])) { args = arguments[1]; options = util._extend({}, arguments[2]); + } else if (arguments[1] && typeof arguments[1] !== 'object') { + throw new TypeError('Incorrect value of args option'); } else { args = []; options = util._extend({}, arguments[1]); @@ -645,7 +647,7 @@ exports.exec = function(command /*, options, callback */) { exports.execFile = function(file /* args, options, callback */) { - var args, callback; + var args = [], optionArg, callback; var options = { encoding: 'utf8', timeout: 0, @@ -655,18 +657,26 @@ exports.execFile = function(file /* args, options, callback */) { env: null }; - // Parse the parameters. + // Parse the optional positional parameters. + var pos = 1; + if (pos < arguments.length && Array.isArray(arguments[pos])) { + args = arguments[pos++]; + } else if (pos < arguments.length && arguments[pos] == null) { + pos++; + } - if (util.isFunction(arguments[arguments.length - 1])) { - callback = arguments[arguments.length - 1]; + if (pos < arguments.length && typeof arguments[pos] === 'object') { + options = util._extend(options, arguments[pos++]); + } else if (pos < arguments.length && arguments[pos] == null) { + pos++; } - if (util.isArray(arguments[1])) { - args = arguments[1]; - options = util._extend(options, arguments[2]); - } else { - args = []; - options = util._extend(options, arguments[1]); + if (pos < arguments.length && typeof arguments[pos] === 'function') { + callback = arguments[pos++]; + } + + if (pos === 1 && arguments.length > 1) { + throw new TypeError('Incorrect value of args option'); } var child = spawn(file, args, { @@ -970,7 +980,7 @@ function normalizeSpawnArguments(file /*, args, options*/) { } -var spawn = exports.spawn = function(/*file, args, options*/) { +var spawn = exports.spawn = function(file /*, args, options*/) { var opts = normalizeSpawnArguments.apply(null, arguments); var options = opts.options; var child = new ChildProcess(); |