Skip to content

Commit 4f8e446

Browse files
authored
use Path::to_str instead of Path::display where appropriate (#196)
`Path::display` is lossy, which can lead to subtle, hard-to-diagnose errors if it is used to construct command arguments. It's better to fail early and explicitly if the path contains non-UTF8 bytes.
1 parent 923e89d commit 4f8e446

File tree

1 file changed

+26
-11
lines changed

1 file changed

+26
-11
lines changed

build.rs

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -302,25 +302,23 @@ fn maybe_make_cpython(repo_dir: &Path, wasi_sdk: &Path) -> Result<()> {
302302
let config_guess =
303303
run(Command::new("../../config.guess").current_dir(&cpython_wasi_dir))?;
304304

305+
let dir = cpython_wasi_dir
306+
.to_str()
307+
.ok_or_else(|| anyhow!("non-utf8 path: {}", cpython_wasi_dir.display()))?;
308+
305309
run(Command::new("../../Tools/wasm/wasi-env")
306310
.env(
307311
"CONFIG_SITE",
308312
"../../Tools/wasm/wasi/config.site-wasm32-wasi",
309313
)
310314
.env(
311315
"CFLAGS",
312-
format!(
313-
"--target=wasm32-wasip2 -fPIC -I{}/deps/include",
314-
cpython_wasi_dir.display()
315-
),
316+
format!("--target=wasm32-wasip2 -fPIC -I{dir}/deps/include",),
316317
)
317318
.env("WASI_SDK_PATH", wasi_sdk)
318319
.env(
319320
"LDFLAGS",
320-
format!(
321-
"--target=wasm32-wasip2 -L{}/deps/lib",
322-
cpython_wasi_dir.display()
323-
),
321+
format!("--target=wasm32-wasip2 -L{dir}/deps/lib",),
324322
)
325323
.current_dir(&cpython_wasi_dir)
326324
.args([
@@ -524,21 +522,38 @@ fn build_zlib(wasi_sdk: &Path, install_dir: &Path) -> Result<()> {
524522
&out_dir,
525523
)?;
526524
let src_dir = out_dir.join("zlib-1.3.1");
525+
526+
let prefix = install_dir
527+
.to_str()
528+
.ok_or_else(|| anyhow!("non-utf8 path: {}", install_dir.display()))?;
529+
527530
let mut configure = Command::new("./configure");
528531
add_compile_envs(wasi_sdk, &mut configure);
529532
configure
530533
.current_dir(&src_dir)
531534
.arg("--static")
532-
.arg(format!("--prefix={}", install_dir.display()));
535+
.arg(format!("--prefix={prefix}"));
533536
run(&mut configure)?;
537+
538+
let ar_dir = wasi_sdk.join("bin/ar");
539+
let ar_dir = ar_dir
540+
.to_str()
541+
.ok_or_else(|| anyhow!("non-utf8 path: {}", ar_dir.display()))?;
542+
543+
let clang_dir = wasi_sdk.join("bin/clang");
544+
let clang_dir = clang_dir
545+
.to_str()
546+
.ok_or_else(|| anyhow!("non-utf8 path: {}", clang_dir.display()))?;
547+
534548
let mut make = Command::new("make");
535549
add_compile_envs(wasi_sdk, &mut make);
536550
make.current_dir(src_dir)
537-
.arg(format!("AR={}", wasi_sdk.join("bin/ar").display()))
551+
.arg(format!("AR={ar_dir}"))
538552
.arg("ARFLAGS=rcs")
539-
.arg(format!("CC={}", wasi_sdk.join("bin/clang").display()))
553+
.arg(format!("CC={clang_dir}"))
540554
.arg("static")
541555
.arg("install");
542556
run(&mut make)?;
557+
543558
Ok(())
544559
}

0 commit comments

Comments
 (0)