child_process: remove extra newline in errors

checkExecSyncError() creates error objects for execSync() and
execFileSync(). If the child process created stderr output, then
it is attached to the end of the error message. However, stderr
can be an empty Buffer object, which always passes the truthy
check, leading to an extra newline in the error message. This
commit adds a length check, which will work with both strings and
Buffers.

PR-URL: https://github.com/nodejs/node/pull/9343
Reviewed-By: Wyatt Preul <wpreul@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
cjihrig 2016-10-28 14:02:24 -04:00
parent 0fb21df6e6
commit 49d1c366d8
2 changed files with 2 additions and 2 deletions

View File

@ -483,7 +483,7 @@ function checkExecSyncError(ret) {
if (!err) {
var msg = 'Command failed: ';
msg += ret.cmd || ret.args.join(' ');
if (ret.stderr)
if (ret.stderr && ret.stderr.length > 0)
msg += '\n' + ret.stderr.toString();
err = new Error(msg);
}

View File

@ -98,7 +98,7 @@ assert.strictEqual(ret, msg + '\n',
const msg = `Command failed: ${process.execPath} ${args.join(' ')}`;
assert(err instanceof Error);
assert.strictEqual(err.message.trim(), msg);
assert.strictEqual(err.message, msg);
assert.strictEqual(err.status, 1);
return true;
});