use std::path::Path;
use std::process::Command;
const CLANG_AR: &str = "/tmp/clang-ar/clang-apply-replacements.exe";
const RSLEIGH_BIN: &str = env!("CARGO_BIN_EXE_rsleigh");
fn fixture_available() -> bool {
if Path::new(CLANG_AR).exists() {
return true;
}
if std::env::var_os("RSLEIGH_REQUIRE_CLANG_AR_FIXTURE").is_some() {
panic!("clang-apply-replacements fixture missing at {CLANG_AR}");
}
eprintln!("[skip] clang-apply-replacements fixture missing at {CLANG_AR}");
false
}
#[test]
fn rep_stosb_df_does_not_leak() {
if !fixture_available() {
return;
}
let out = Command::new(RSLEIGH_BIN)
.args([CLANG_AR, "0x1401271f0"])
.output()
.expect("rsleigh invocation");
assert!(
out.status.success(),
"rsleigh failed:\n{}",
String::from_utf8_lossy(&out.stderr)
);
let text = String::from_utf8(out.stdout).expect("UTF-8");
assert!(
!text.contains("(uint8_t)DF") && !text.contains(" DF ") && !text.contains("*DF"),
"direction flag leaked into output:\n{text}"
);
}