From 4a561f12dbae5a49203eb2c08fed71d9d0dfeb99 Mon Sep 17 00:00:00 2001 From: zuisong <19145952+zuisong@users.noreply.github.com> Date: Tue, 5 Sep 2023 18:42:35 +0800 Subject: fix(node/child_process): don't crash on undefined/null value of an env var (#20378) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #20373 --------- Co-authored-by: Bartek IwaƄczuk --- cli/tests/unit_node/child_process_test.ts | 57 ++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) (limited to 'cli/tests') diff --git a/cli/tests/unit_node/child_process_test.ts b/cli/tests/unit_node/child_process_test.ts index 9abd5c1e6..a282977e0 100644 --- a/cli/tests/unit_node/child_process_test.ts +++ b/cli/tests/unit_node/child_process_test.ts @@ -13,7 +13,7 @@ import { import { Deferred, deferred } from "../../../test_util/std/async/deferred.ts"; import * as path from "../../../test_util/std/path/mod.ts"; -const { spawn, execFile, execFileSync, ChildProcess } = CP; +const { spawn, spawnSync, execFile, execFileSync, ChildProcess } = CP; function withTimeout(timeoutInMS = 10_000): Deferred { const promise = deferred(); @@ -640,3 +640,58 @@ Deno.test({ assertEquals(cp.signalCode, "SIGIOT"); }, }); + +// Regression test for https://github.com/denoland/deno/issues/20373 +Deno.test(async function undefinedValueInEnvVar() { + const promise = withTimeout(); + const env = spawn( + `"${Deno.execPath()}" eval -p "Deno.env.toObject().BAZ"`, + { + env: { + BAZ: "BAZ", + NO_COLOR: "true", + UNDEFINED_ENV: undefined, + // deno-lint-ignore no-explicit-any + NULL_ENV: null as any, + }, + shell: true, + }, + ); + try { + let envOutput = ""; + + assert(env.stdout); + env.on("error", (err: Error) => promise.reject(err)); + env.stdout.on("data", (data) => { + envOutput += data; + }); + env.on("close", () => { + promise.resolve(envOutput.trim()); + }); + await promise; + } finally { + env.kill(); + } + const value = await promise; + assertEquals(value, "BAZ"); +}); + +// Regression test for https://github.com/denoland/deno/issues/20373 +Deno.test(function spawnSyncUndefinedValueInEnvVar() { + const ret = spawnSync( + `"${Deno.execPath()}" eval -p "Deno.env.toObject().BAZ"`, + { + env: { + BAZ: "BAZ", + NO_COLOR: "true", + UNDEFINED_ENV: undefined, + // deno-lint-ignore no-explicit-any + NULL_ENV: null as any, + }, + shell: true, + }, + ); + + assertEquals(ret.status, 0); + assertEquals(ret.stdout.toString("utf-8").trim(), "BAZ"); +}); -- cgit v1.2.3