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

Jakub Konka created

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

Change summary

crates/extension_host/src/wasm_host.rs          | 8 +++++---
extensions/test-extension/src/test_extension.rs | 4 ++++
2 files changed, 9 insertions(+), 3 deletions(-)

Detailed changes

crates/extension_host/src/wasm_host.rs 🔗

@@ -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())
     }

extensions/test-extension/src/test_extension.rs 🔗

@@ -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();