diff options
-rw-r--r-- | cli/dts/lib.deno.ns.d.ts | 2 | ||||
-rw-r--r-- | cli/tests/unit/process_test.ts | 7 | ||||
-rw-r--r-- | runtime/js/40_process.js | 3 |
3 files changed, 9 insertions, 3 deletions
diff --git a/cli/dts/lib.deno.ns.d.ts b/cli/dts/lib.deno.ns.d.ts index 02f514673..d55ac231e 100644 --- a/cli/dts/lib.deno.ns.d.ts +++ b/cli/dts/lib.deno.ns.d.ts @@ -2398,7 +2398,7 @@ declare namespace Deno { export interface RunOptions { /** Arguments to pass. Note, the first element needs to be a path to the * binary */ - cmd: string[] | [URL, ...string[]]; + cmd: readonly string[] | [URL, ...string[]]; cwd?: string; env?: { [key: string]: string; diff --git a/cli/tests/unit/process_test.ts b/cli/tests/unit/process_test.ts index 3ef19a879..e4e2cc3c5 100644 --- a/cli/tests/unit/process_test.ts +++ b/cli/tests/unit/process_test.ts @@ -21,7 +21,12 @@ Deno.test( { permissions: { run: true, read: true } }, async function runSuccess() { const p = Deno.run({ - cmd: [Deno.execPath(), "eval", "console.log('hello world')"], + // freeze the array to ensure it's not modified + cmd: Object.freeze([ + Deno.execPath(), + "eval", + "console.log('hello world')", + ]), stdout: "piped", stderr: "null", }); diff --git a/runtime/js/40_process.js b/runtime/js/40_process.js index c33ce1c04..545c6c6d6 100644 --- a/runtime/js/40_process.js +++ b/runtime/js/40_process.js @@ -9,6 +9,7 @@ const { assert } = window.__bootstrap.infra; const { ArrayPrototypeMap, + ArrayPrototypeSlice, TypeError, isNaN, ObjectEntries, @@ -110,7 +111,7 @@ stdin = "inherit", }) { if (cmd[0] != null) { - cmd[0] = pathFromURL(cmd[0]); + cmd = [pathFromURL(cmd[0]), ...ArrayPrototypeSlice(cmd, 1)]; } const res = opRun({ cmd: ArrayPrototypeMap(cmd, String), |