summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/fs/lib.rs6
-rw-r--r--tests/unit/os_test.ts32
2 files changed, 35 insertions, 3 deletions
diff --git a/ext/fs/lib.rs b/ext/fs/lib.rs
index 2dce04b32..8eb6f2764 100644
--- a/ext/fs/lib.rs
+++ b/ext/fs/lib.rs
@@ -89,9 +89,9 @@ impl FsPermissions for deno_permissions::PermissionsContainer {
api_name: &str,
) -> Result<Cow<'a, Path>, FsError> {
if resolved {
- self.check_special_file(path, api_name).map_err(|_| {
- std::io::Error::from(std::io::ErrorKind::PermissionDenied)
- })?;
+ self
+ .check_special_file(path, api_name)
+ .map_err(FsError::PermissionDenied)?;
return Ok(Cow::Borrowed(path));
}
diff --git a/tests/unit/os_test.ts b/tests/unit/os_test.ts
index 30d8f26ee..80b421e63 100644
--- a/tests/unit/os_test.ts
+++ b/tests/unit/os_test.ts
@@ -3,6 +3,7 @@ import {
assert,
assertEquals,
assertNotEquals,
+ assertStringIncludes,
assertThrows,
} from "./test_util.ts";
@@ -196,6 +197,37 @@ Deno.test({ permissions: { read: false } }, function execPathPerm() {
);
});
+Deno.test(async function execPathPerm() {
+ if (Deno.build.os !== "linux") return;
+ // This is hack to bypass a bug in deno test runner,
+ // Currently if you specify {read: true} permission, it will stil pass --allow-all (tests are run with deno test --allow-all) implicitly, so this test won't work
+ // The workaround is to spawn a deno executable with the needed permissions
+ // TODO(#25085): remove this hack when the bug is fixed
+ const cmd = new Deno.Command(Deno.execPath(), {
+ args: ["run", "--allow-read", "-"],
+ stdin: "piped",
+ stderr: "piped",
+ }).spawn();
+ const stdinWriter = cmd.stdin.getWriter();
+ await stdinWriter
+ .write(
+ new TextEncoder().encode('Deno.readTextFileSync("/proc/net/dev")'),
+ );
+ await stdinWriter.close();
+ await cmd.status;
+
+ const stderrReder = cmd.stderr.getReader();
+ const error = await stderrReder
+ .read()
+ .then((r) => new TextDecoder().decode(r.value));
+ await stderrReder.cancel();
+
+ assertStringIncludes(
+ error,
+ `PermissionDenied: Requires all access to "/proc/net/dev", run again with the --allow-all flag`,
+ );
+});
+
Deno.test(
{ permissions: { sys: ["loadavg"] } },
function loadavgSuccess() {