child_process: clone spawn options argument
authorcjihrig <cjihrig@gmail.com>
Fri, 23 Jan 2015 22:18:55 +0000 (17:18 -0500)
committercjihrig <cjihrig@gmail.com>
Mon, 26 Jan 2015 16:59:30 +0000 (11:59 -0500)
spawnSync() modifies the options argument. This commit makes
a copy of options before any modifications occur.

Fixes: https://github.com/iojs/io.js/issues/576
PR-URL: https://github.com/iojs/io.js/pull/579
Reviewed-By: Bert Belder <bertbelder@gmail.com>
lib/child_process.js
test/common.js
test/parallel/test-child-process-stdio.js

index 0d73beb..9226d12 100644 (file)
@@ -931,6 +931,7 @@ function normalizeSpawnArguments(file /*, args, options*/) {
   else if (!util.isObject(options))
     throw new TypeError('options argument must be an object');
 
+  options = util._extend({}, options);
   args.unshift(file);
 
   var env = options.env || process.env;
index b9b03c7..0cd9912 100644 (file)
@@ -97,6 +97,17 @@ exports.spawnCat = function(options) {
 };
 
 
+exports.spawnSyncCat = function(options) {
+  var spawnSync = require('child_process').spawnSync;
+
+  if (process.platform === 'win32') {
+    return spawnSync('more', [], options);
+  } else {
+    return spawnSync('cat', [], options);
+  }
+};
+
+
 exports.spawnPwd = function(options) {
   var spawn = require('child_process').spawn;
 
index 2e1875a..7292007 100644 (file)
@@ -13,3 +13,7 @@ child = common.spawnPwd(options);
 
 assert.equal(child.stdout, null);
 assert.equal(child.stderr, null);
+
+options = {stdio: 'ignore'};
+child = common.spawnSyncCat(options);
+assert.deepEqual(options, {stdio: 'ignore'});