From fded424e689dd5f5a3f3e1539f4bc2b36a6e324e Mon Sep 17 00:00:00 2001 From: Pat Hickey Date: Mon, 25 Jan 2021 17:07:43 -0800 Subject: [PATCH] Dir::hard_link: dont support symlink following if we're asked to follow symlinks, give ERRNO_INVAL instead. --- crates/wasi-c2/cap-std-sync/src/dir.rs | 1 - crates/wasi-c2/src/dir.rs | 1 - crates/wasi-c2/src/snapshots/preview_1.rs | 5 ++++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/crates/wasi-c2/cap-std-sync/src/dir.rs b/crates/wasi-c2/cap-std-sync/src/dir.rs index d4e357e6a7..ca75dfbf53 100644 --- a/crates/wasi-c2/cap-std-sync/src/dir.rs +++ b/crates/wasi-c2/cap-std-sync/src/dir.rs @@ -200,7 +200,6 @@ impl WasiDir for Dir { fn hard_link( &self, src_path: &str, - symlink_follow: bool, // XXX not in cap-std yet target_dir: &dyn WasiDir, target_path: &str, ) -> Result<(), Error> { diff --git a/crates/wasi-c2/src/dir.rs b/crates/wasi-c2/src/dir.rs index a0b59c3647..3d2ffa1aa6 100644 --- a/crates/wasi-c2/src/dir.rs +++ b/crates/wasi-c2/src/dir.rs @@ -32,7 +32,6 @@ pub trait WasiDir { fn hard_link( &self, path: &str, - symlink_follow: bool, target_dir: &dyn WasiDir, target_path: &str, ) -> Result<(), Error>; diff --git a/crates/wasi-c2/src/snapshots/preview_1.rs b/crates/wasi-c2/src/snapshots/preview_1.rs index 32b87cd897..28640d23a3 100644 --- a/crates/wasi-c2/src/snapshots/preview_1.rs +++ b/crates/wasi-c2/src/snapshots/preview_1.rs @@ -749,10 +749,13 @@ impl<'a> wasi_snapshot_preview1::WasiSnapshotPreview1 for WasiCtx { .get_dir(u32::from(target_fd))? .get_cap(DirCaps::LINK_TARGET)?; let symlink_follow = src_flags.contains(types::Lookupflags::SYMLINK_FOLLOW); + if symlink_follow { + return Err(Error::invalid_argument() + .context("symlink following on path_link is not supported")); + } src_dir.hard_link( src_path.as_str()?.deref(), - symlink_follow, target_dir.deref(), target_path.as_str()?.deref(), )