summaryrefslogtreecommitdiff
path: root/std/wasi
diff options
context:
space:
mode:
authorCasper Beyer <caspervonb@pm.me>2020-06-28 03:55:05 +0800
committerGitHub <noreply@github.com>2020-06-27 15:55:05 -0400
commit5f3d730df0a249357a0d9112b9ee25f16bf7b8d4 (patch)
treee34b5216f9be04c535eef963f3841e2d42274c2c /std/wasi
parent40dcfc89969b6492a616d816c67ffdc081132d15 (diff)
fix(std/wasi): use lookupflags for path_filestat_get (#6530)
Diffstat (limited to 'std/wasi')
-rw-r--r--std/wasi/snapshot_preview1.ts5
-rw-r--r--std/wasi/testdata/std_fs_symlink_metadata.rs23
2 files changed, 27 insertions, 1 deletions
diff --git a/std/wasi/snapshot_preview1.ts b/std/wasi/snapshot_preview1.ts
index e04222240..0067499cc 100644
--- a/std/wasi/snapshot_preview1.ts
+++ b/std/wasi/snapshot_preview1.ts
@@ -853,7 +853,10 @@ export default class Module {
const view = new DataView(this.memory.buffer);
try {
- const info = Deno.statSync(path);
+ const info =
+ (flags & LOOKUPFLAGS_SYMLINK_FOLLOW) != 0
+ ? Deno.statSync(path)
+ : Deno.lstatSync(path);
view.setBigUint64(buf_out, BigInt(info.dev ? info.dev : 0), true);
buf_out += 8;
diff --git a/std/wasi/testdata/std_fs_symlink_metadata.rs b/std/wasi/testdata/std_fs_symlink_metadata.rs
new file mode 100644
index 000000000..1b71fd5e0
--- /dev/null
+++ b/std/wasi/testdata/std_fs_symlink_metadata.rs
@@ -0,0 +1,23 @@
+// { "preopens": { "/fixture": "fixture" } }
+
+fn main() {
+ let metadata = std::fs::symlink_metadata("/fixture/directory").unwrap();
+ assert!(metadata.file_type().is_dir());
+
+ let metadata =
+ std::fs::symlink_metadata("/fixture/symlink_to_directory").unwrap();
+ assert!(metadata.file_type().is_symlink());
+
+ let metadata = std::fs::symlink_metadata("/fixture/file").unwrap();
+ assert!(metadata.file_type().is_file());
+
+ let metadata = std::fs::symlink_metadata("/fixture/symlink_to_file").unwrap();
+ assert!(metadata.file_type().is_symlink());
+
+ let metadata = std::fs::symlink_metadata("/fixture/directory/file").unwrap();
+ assert!(metadata.file_type().is_file());
+
+ let metadata =
+ std::fs::symlink_metadata("/fixture/directory/symlink_to_file").unwrap();
+ assert!(metadata.file_type().is_symlink());
+}