feat: Deno.cwd() no longer requires --allow-read permission (#27192)

This commit changes "Deno.cwd()" (as well as "process.cwd()") to no
longer require full "--allow-read" permission. This change was meant to be done
in Deno 2.0.0, but somehow it slipped. Requiring full read permission
just to read the CWD is a mistake, because CWD can already be obtained
with no permission by throwing an error in JS and inspecting its stack.

Fixes https://github.com/denoland/deno/issues/27110

---------

Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
This commit is contained in:
Marvin Hagemeister 2025-01-27 15:13:59 +01:00 committed by GitHub
parent 533993efcf
commit 4e655e543f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 22 additions and 22 deletions

View file

@ -171,9 +171,6 @@ where
{ {
let fs = state.borrow::<FileSystemRc>(); let fs = state.borrow::<FileSystemRc>();
let path = fs.cwd()?; let path = fs.cwd()?;
state
.borrow_mut::<P>()
.check_read_blind(&path, "CWD", "Deno.cwd()")?;
let path_str = path_into_string(path.into_os_string())?; let path_str = path_into_string(path.into_os_string())?;
Ok(path_str) Ok(path_str)
} }

View file

@ -820,14 +820,14 @@ fn compile_npm_cowsay_main() {
#[test] #[test]
fn compile_npm_no_permissions() { fn compile_npm_no_permissions() {
run_npm_bin_compile_test(RunNpmBinCompileOptions { run_npm_bin_compile_test(RunNpmBinCompileOptions {
input_specifier: "npm:cowsay@1.5.0", input_specifier: "npm:@denotest/cli-with-permissions@1.0.0",
copy_temp_dir: None, copy_temp_dir: None,
compile_args: vec![], compile_args: vec!["-o", "denotest"],
run_args: vec!["Hello"], run_args: vec!["Hello"],
output_file: "npm/deno_run_cowsay_no_permissions.out", output_file: "npm/compile_npm_no_permissions.out",
node_modules_local: false, node_modules_local: false,
input_name: None, input_name: None,
expected_name: "cowsay", expected_name: "denotest",
exit_code: 1, exit_code: 1,
}); });
} }

View file

@ -358,10 +358,12 @@ fn permissions_prompt_allow_all_2() {
console.write_line_raw("A"); console.write_line_raw("A");
console.expect("✅ Granted all sys access."); console.expect("✅ Granted all sys access.");
let text = console.read_until("Allow? [y/n/A] (y = yes, allow; n = no, deny; A = allow all read permissions)");
// "read" permissions // "read" permissions
console.expect(concat!( test_util::assertions::assert_wildcard_match(&text, concat!(
"┏ ⚠️ Deno requests read access to <CWD>.\r\n", "\r\n",
"┠─ Requested by `Deno.cwd()` API.\r\n", "┏ ⚠️ Deno requests read access to \"[WILDCARD]/tests/testdata/\".\r\n",
"┠─ Requested by `Deno.lstatSync()` API.\r\n",
"┠─ To see a stack trace for this prompt, set the DENO_TRACE_PERMISSIONS environmental variable.\r\n", "┠─ To see a stack trace for this prompt, set the DENO_TRACE_PERMISSIONS environmental variable.\r\n",
"┠─ Learn more at: https://docs.deno.com/go/--allow-read\r\n", "┠─ Learn more at: https://docs.deno.com/go/--allow-read\r\n",
"┠─ Run again with --allow-read to bypass this prompt.\r\n", "┠─ Run again with --allow-read to bypass this prompt.\r\n",

View file

@ -0,0 +1,3 @@
console.log("Hello in CLI with permissions");
console.log("Reading DENO_HELLO env var...");
console.log(Deno.env.get("DENO_HELLO"));

View file

@ -0,0 +1,5 @@
{
"name": "@denotest/cli-with-permissions",
"version": "1.0.0",
"bin": "./index.js"
}

View file

@ -0,0 +1,5 @@
Hello in CLI with permissions
Reading DENO_HELLO env var...
error: Uncaught (in promise) NotCapable: Requires env access to "DENO_HELLO", specify the required permissions during compilation using `deno compile --allow-env`
console.log(Deno.env.get("DENO_HELLO"));
[WILDCARD]

View file

@ -1,2 +0,0 @@
error: Uncaught (in promise) NotCapable: Requires read access to <CWD>, specify the required permissions during compilation using `deno compile --allow-read`
[WILDCARD]

View file

@ -38,16 +38,6 @@ Deno.test({ permissions: { read: true, write: true } }, function dirCwdError() {
} }
}); });
Deno.test({ permissions: { read: false } }, function dirCwdPermError() {
assertThrows(
() => {
Deno.cwd();
},
Deno.errors.NotCapable,
"Requires read access to <CWD>, run again with the --allow-read flag",
);
});
Deno.test( Deno.test(
{ permissions: { read: true, write: true } }, { permissions: { read: true, write: true } },
function dirChdirError() { function dirChdirError() {