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 committed May 24, 2016
1 parent af61ebf commit dc76aff
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 @@ -438,7 +438,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 @@ -241,6 +241,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.deepStrictEqual(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 dc76aff

Please sign in to comment.