move test to tests/scryer/ffi.rs
Signed-off-by: Thierry Marianne <thierry@marianne.io>
This commit is contained in:
@@ -302,3 +302,24 @@ fn ffi_heap() {
|
|||||||
r#"133742"#,
|
r#"133742"#,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[cfg_attr(miri, ignore = "ffi")]
|
||||||
|
fn ffi_utf8_panic() {
|
||||||
|
let dynlib_path = build_dynamic_library(
|
||||||
|
"ffi_utf8_panic",
|
||||||
|
r##"
|
||||||
|
#[unsafe(no_mangle)]
|
||||||
|
extern "C" fn ffi_invalid_utf8_cstr() -> *const core::ffi::c_char {
|
||||||
|
b"Invalid\xFFUTF8\x00".as_ptr() as *const _
|
||||||
|
}
|
||||||
|
"##,
|
||||||
|
);
|
||||||
|
|
||||||
|
load_module_test_with_input(
|
||||||
|
"tests-pl/ffi_utf8_panic.pl",
|
||||||
|
format!("LIB={dynlib_path:?}."),
|
||||||
|
// Evaluates to: 'Invalid\xFFUTF8\n'
|
||||||
|
"[73,110,118,97,108,105,100,255,85,84,70,56]\n",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
@@ -151,49 +151,3 @@ fn http_open_hanging() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
#[cfg_attr(miri, ignore = "ffi")]
|
|
||||||
fn ffi_utf8_panic() {
|
|
||||||
let tmp_dir: &std::path::Path = env!("CARGO_TARGET_TMPDIR").as_ref();
|
|
||||||
let name = "ffi_utf8_panic";
|
|
||||||
let src = r##"
|
|
||||||
#[unsafe(no_mangle)]
|
|
||||||
extern "C" fn ffi_invalid_utf8_cstr() -> *const core::ffi::c_char {
|
|
||||||
c"Invalid\xFFUTF8".as_ptr()
|
|
||||||
}
|
|
||||||
"##;
|
|
||||||
|
|
||||||
let mut child = std::process::Command::new("rustc")
|
|
||||||
.stdin(std::process::Stdio::piped())
|
|
||||||
.args(["--edition", "2024"])
|
|
||||||
.arg(format!("--target={}", current_platform::CURRENT_PLATFORM))
|
|
||||||
.arg("--crate-type=dylib")
|
|
||||||
.arg(format!("--crate-name={name}"))
|
|
||||||
.arg("--out-dir")
|
|
||||||
.arg(tmp_dir)
|
|
||||||
.arg("-")
|
|
||||||
.spawn()
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
use std::io::Write;
|
|
||||||
child
|
|
||||||
.stdin
|
|
||||||
.take()
|
|
||||||
.unwrap()
|
|
||||||
.write_all(src.as_bytes())
|
|
||||||
.unwrap();
|
|
||||||
assert!(child.wait().unwrap().success());
|
|
||||||
|
|
||||||
let dynlib_path = tmp_dir.join(format!(
|
|
||||||
"{}{name}{}",
|
|
||||||
std::env::consts::DLL_PREFIX,
|
|
||||||
std::env::consts::DLL_SUFFIX
|
|
||||||
));
|
|
||||||
|
|
||||||
crate::helper::load_module_test_with_input(
|
|
||||||
"tests-pl/ffi_utf8_panic.pl",
|
|
||||||
format!("LIB={dynlib_path:?}."),
|
|
||||||
// Evaluates to: 'Invalid\xFFUTF8\n'
|
|
||||||
"[73,110,118,97,108,105,100,255,85,84,70,56]\n",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user