diff --git a/src/bin/cargo-miri.rs b/src/bin/cargo-miri.rs index 14f381a45546..15c66f8c0dba 100644 --- a/src/bin/cargo-miri.rs +++ b/src/bin/cargo-miri.rs @@ -340,6 +340,11 @@ path = "lib.rs" let sysroot = if is_host { dir.join("HOST") } else { PathBuf::from(dir) }; std::env::set_var("MIRI_SYSROOT", &sysroot); // pass the env var to the processes we spawn, which will turn it into "--sysroot" flags if print_env { + // Escape an arbitrary string for the shell: by wrapping it in `'`, the only special + // character we have to worry about is `'` itself. Everything else is taken literally + // in these strings. `'` is encoded as `'"'"'`: the outer `'` end and being a + // `'`-quoted string, respectively; the `"'"` in the middle represents a single `'`. + // (We could use `'\''` instead of `'"'"'` if we wanted but let's avoid backslashes.) println!("MIRI_SYSROOT='{}'", sysroot.display().to_string().replace('\'', r#"'"'"'"#)); } else if !ask_user { println!("A libstd for Miri is now available in `{}`.", sysroot.display());