ci: unbreak Windows tests; sharpen Linux loader-crash forensics

oakcodec: gate find_ffmpeg_searches_path to unix (chmod 0755 + shebang
fixture) and make find_ffmpeg_missing_returns_empty assert absoluteness
instead of a '/' prefix so the tests compile and pass on Windows.

ci (Windows): export RUSTFLAGS=-C link-args=-lmsvcrt in the build and
test steps. mingw-w64 (Nov 2025) forwards _assert to __msvcrt_assert
inside libmingwex.a, and rustc's link order leaves -lmingwex last, so
binaries that pull _assert.o (oakcommon's real_ocio test) fail to link;
a trailing -lmsvcrt re-scans the CRT import lib afterwards.

ci (Linux): copier_test dies inside ld.so before printing anything.
Replace the LD_DEBUG probe with stronger forensics: exported dynsyms
(interposition suspects), strace tail, valgrind tail, and siginfo
(si_code/si_addr) from the gdb run.
This commit is contained in:
2026-08-21 11:17:39 +08:00
parent bea50f4d80
commit 8660cbcf97
2 changed files with 31 additions and 9 deletions
+7 -1
View File
@@ -657,7 +657,10 @@ mod tests {
let found = ProxyManager::find_ffmpeg("/definitely/not/a/real/ffmpeg");
// Either an absolute configured/installed match or empty; never a raw
// unresolved path.
assert!(found.is_empty() || found.starts_with('/'));
assert!(
found.is_empty() || std::path::Path::new(&found).is_absolute(),
"found: {found}"
);
}
/// `oakcodec_proxy_params` byte-level layout lock against
@@ -683,6 +686,9 @@ mod tests {
mod tests_extra {
use super::*;
/// Unix-only: builds a fake `ffmpeg` shell script with a mode-0755
/// chmod; Windows has no permission bits and searches for `ffmpeg.exe`.
#[cfg(unix)]
#[test]
fn find_ffmpeg_searches_path() {
// Create a fake executable in a temp dir and prepend it to PATH.