diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2023-11-10 06:59:39 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-10 05:59:39 +0000 |
commit | 612b7dfcc76278f7823b2ea09540922955ac8bf5 (patch) | |
tree | f23fcc736f51baf7178ddc9476f379858c3c7f06 | |
parent | 9010b8df53cd37f0410e08c43a194667974686a2 (diff) |
fix(node/child_process): properly normalize stdio for 'spawnSync' (#21103)
Closes https://github.com/denoland/deno/issues/20782
-rw-r--r-- | cli/tests/unit_node/child_process_test.ts | 14 | ||||
-rw-r--r-- | ext/node/polyfills/internal/child_process.ts | 11 |
2 files changed, 22 insertions, 3 deletions
diff --git a/cli/tests/unit_node/child_process_test.ts b/cli/tests/unit_node/child_process_test.ts index 8d1c9a6b7..47e87096e 100644 --- a/cli/tests/unit_node/child_process_test.ts +++ b/cli/tests/unit_node/child_process_test.ts @@ -707,3 +707,17 @@ Deno.test(function spawnSyncUndefinedValueInEnvVar() { assertEquals(ret.status, 0); assertEquals(ret.stdout.toString("utf-8").trim(), "BAZ"); }); + +Deno.test(function spawnSyncStdioUndefined() { + const ret = spawnSync( + `"${Deno.execPath()}" eval "console.log('hello');console.error('world')"`, + { + stdio: [undefined, undefined, undefined], + shell: true, + }, + ); + + assertEquals(ret.status, 0); + assertEquals(ret.stdout.toString("utf-8").trim(), "hello"); + assertEquals(ret.stderr.toString("utf-8").trim(), "world"); +}); diff --git a/ext/node/polyfills/internal/child_process.ts b/ext/node/polyfills/internal/child_process.ts index 33b0b3166..7d707758e 100644 --- a/ext/node/polyfills/internal/child_process.ts +++ b/ext/node/polyfills/internal/child_process.ts @@ -835,7 +835,12 @@ export function spawnSync( maxBuffer, windowsVerbatimArguments = false, } = options; - const normalizedStdio = normalizeStdioOption(stdio); + const [ + _stdin_ = "pipe", // TODO(bartlomieju): use this? + stdout_ = "pipe", + stderr_ = "pipe", + _channel, // TODO(kt3k): handle this correctly + ] = normalizeStdioOption(stdio); [command, args] = buildCommand(command, args ?? [], shell); const result: SpawnSyncResult = {}; @@ -844,8 +849,8 @@ export function spawnSync( args, cwd, env: mapValues(env, (value) => value.toString()), - stdout: toDenoStdio(normalizedStdio[1]), - stderr: toDenoStdio(normalizedStdio[2]), + stdout: toDenoStdio(stdout_), + stderr: toDenoStdio(stderr_), uid, gid, windowsRawArguments: windowsVerbatimArguments, |