summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/node/polyfills/internal/child_process.ts11
-rw-r--r--tests/unit_node/child_process_test.ts13
2 files changed, 23 insertions, 1 deletions
diff --git a/ext/node/polyfills/internal/child_process.ts b/ext/node/polyfills/internal/child_process.ts
index 5a9212618..0ca2a958e 100644
--- a/ext/node/polyfills/internal/child_process.ts
+++ b/ext/node/polyfills/internal/child_process.ts
@@ -503,11 +503,20 @@ function normalizeStdioOption(
if (Array.isArray(stdio)) {
// `[0, 1, 2]` is equivalent to `"inherit"`
if (
- stdio.length === 3 && stdio[0] === 0 && stdio[1] === 1 && stdio[2] === 2
+ stdio.length === 3 &&
+ (stdio[0] === 0 && stdio[1] === 1 && stdio[2] === 2)
) {
return ["inherit", "inherit", "inherit"];
}
+ // `[null, null, null]` is equivalent to `"pipe"
+ if (
+ stdio.length === 3 &&
+ stdio[0] === null || stdio[1] === null || stdio[2] === null
+ ) {
+ return ["pipe", "pipe", "pipe"];
+ }
+
// At least 3 stdio must be created to match node
while (stdio.length < 3) {
ArrayPrototypePush(stdio, undefined);
diff --git a/tests/unit_node/child_process_test.ts b/tests/unit_node/child_process_test.ts
index 36d9d4345..6a1d1dbc5 100644
--- a/tests/unit_node/child_process_test.ts
+++ b/tests/unit_node/child_process_test.ts
@@ -810,3 +810,16 @@ Deno.test(async function spawnCommandNotFoundErrno() {
});
await promise;
});
+
+// https://github.com/denoland/deno/issues/23045
+Deno.test(function spawnCommandNullStdioArray() {
+ const ret = spawnSync(
+ `"${Deno.execPath()}" eval "console.log('hello');console.error('world')"`,
+ {
+ stdio: [null, null, null],
+ shell: true,
+ },
+ );
+
+ assertEquals(ret.status, 0);
+});