extension_host: Replace backslashes with forward slashes for cwd on Windows (#38072)

Instead of passing CWD verbatim from the Windows host with backslashes
and all, we now rewrite it into a more POSIX-happy format featuring
forward slashes which means `std::path::Path` operations now work within
WASI with Windows-style paths.

Release Notes:

- N/A
This commit is contained in:
Jakub Konka
2025-09-12 19:22:24 +02:00
committed by GitHub
parent 7377a898e8
commit 85f7bb6277
2 changed files with 9 additions and 3 deletions

View File

@@ -666,15 +666,17 @@ impl WasmHost {
let file_perms = wasi::FilePerms::all();
let dir_perms = wasi::DirPerms::all();
let path = SanitizedPath::new(&extension_work_dir);
let path = SanitizedPath::new(&extension_work_dir).to_string();
#[cfg(target_os = "windows")]
let path = path.replace('\\', "/");
let mut ctx = wasi::WasiCtxBuilder::new();
ctx.inherit_stdio()
.env("PWD", path.to_string())
.env("PWD", &path)
.env("RUST_BACKTRACE", "full");
ctx.preopened_dir(&path, ".", dir_perms, file_perms)?;
ctx.preopened_dir(&path, path.to_string(), dir_perms, file_perms)?;
ctx.preopened_dir(&path, &path, dir_perms, file_perms)?;
Ok(ctx.build())
}

View File

@@ -18,6 +18,10 @@ impl TestExtension {
let current_dir = std::env::current_dir().unwrap();
println!("current_dir: {}", current_dir.display());
assert_eq!(
current_dir.file_name().unwrap().to_str().unwrap(),
"test-extension"
);
fs::create_dir_all(current_dir.join("dir-created-with-abs-path")).unwrap();
fs::create_dir_all("./dir-created-with-rel-path").unwrap();