Skip to content

Commit

Permalink
child_process: allow buffer encoding in spawnSync
Browse files Browse the repository at this point in the history
When the 'buffer' encoding is passed to spawnSync(), an exception
is thrown in Buffer's toString() method because 'buffer' is not
a valid encoding there. This commit special cases the 'buffer'
encoding.

Fixes: #6930
PR-URL: #6939
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
  • Loading branch information
cjihrig authored and Myles Borins committed Jul 14, 2016
1 parent 426aa0a commit 4ee863d
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lib/child_process.js
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,7 @@ function spawnSync(/*file, args, options*/) {

var result = spawn_sync.spawn(options);

if (result.output && options.encoding) {
if (result.output && options.encoding && options.encoding !== 'buffer') {
for (i = 0; i < result.output.length; i++) {
if (!result.output[i])
continue;
Expand Down
11 changes: 11 additions & 0 deletions test/common.js
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,17 @@ exports.spawnPwd = function(options) {
}
};


exports.spawnSyncPwd = function(options) {
const spawnSync = require('child_process').spawnSync;

if (exports.isWindows) {
return spawnSync('cmd.exe', ['/c', 'cd'], options);
} else {
return spawnSync('pwd', [], options);
}
};

exports.platformTimeout = function(ms) {
if (process.config.target_defaults.default_configuration === 'Debug')
ms = 2 * ms;
Expand Down
14 changes: 14 additions & 0 deletions test/parallel/test-child-process-spawnsync.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,17 @@ assert.deepEqual(ret_err.spawnargs, ['bar']);

assert.strictEqual(response.stdout.toString().trim(), cwd);
})();

{
// Test the encoding option
const noEncoding = common.spawnSyncPwd();
const bufferEncoding = common.spawnSyncPwd({encoding: 'buffer'});
const utf8Encoding = common.spawnSyncPwd({encoding: 'utf8'});

assert.deepStrictEqual(noEncoding.output, bufferEncoding.output);
assert.deepStrictEqual([
null,
noEncoding.stdout.toString(),
noEncoding.stderr.toString()
], utf8Encoding.output);
}

0 comments on commit 4ee863d

Please sign in to comment.