mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-18 10:38:11 +00:00
panic tests: Command: Test that we do not unwind past fork
This is safe (does not involve heap allocation) but we don't yet have a test to ensure that stays true. That will come in a moment. Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk> Co-authored-by: Mara Bos <m-ou.se@m-ou.se>
This commit is contained in:
parent
9283cdca36
commit
f8015061c8
@ -1,3 +1,7 @@
|
|||||||
|
use crate::os::unix::process::{CommandExt, ExitStatusExt};
|
||||||
|
use crate::panic::catch_unwind;
|
||||||
|
use crate::process::Command;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn exitstatus_display_tests() {
|
fn exitstatus_display_tests() {
|
||||||
// In practice this is the same on every Unix.
|
// In practice this is the same on every Unix.
|
||||||
@ -28,3 +32,22 @@ fn exitstatus_display_tests() {
|
|||||||
t(0x000ff, "unrecognised wait status: 255 0xff");
|
t(0x000ff, "unrecognised wait status: 255 0xff");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_command_fork_no_unwind() {
|
||||||
|
let got = catch_unwind(|| {
|
||||||
|
let mut c = Command::new("echo");
|
||||||
|
c.arg("hi");
|
||||||
|
unsafe {
|
||||||
|
c.pre_exec(|| panic!("{}", "crash now!"));
|
||||||
|
}
|
||||||
|
let st = c.status().expect("failed to get command status");
|
||||||
|
dbg!(st);
|
||||||
|
st
|
||||||
|
});
|
||||||
|
dbg!(&got);
|
||||||
|
let status = got.expect("panic unexpectedly propagated");
|
||||||
|
dbg!(status);
|
||||||
|
let signal = status.signal().expect("expected child process to die of signal");
|
||||||
|
assert!(signal == libc::SIGABRT || signal == libc::SIGILL);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user