os-rust/src/test/ui/rt-explody-panic-payloads.rs
Simonas Kazlauskas 9c9a0da132 Change entry point to 🛡️ against 💥 💥-payloads
Guard against panic payloads panicking within entrypoints, where it is
UB to do so.

Note that there are a number of implementation approaches to consider.
Some simpler, some more complicated. This particular solution is nice in
that it also guards against accidental implementation issues in
various pieces of runtime code, something we cannot prevent statically
right now.

Fixes #86030
2021-06-19 11:46:56 +03:00

30 lines
793 B
Rust

// run-pass
// ignore-emscripten no processes
// ignore-sgx no processes
// ignore-wasm32-bare no unwinding panic
// ignore-avr no unwinding panic
// ignore-nvptx64 no unwinding panic
use std::env;
use std::process::Command;
struct Bomb;
impl Drop for Bomb {
fn drop(&mut self) {
std::panic::panic_any(Bomb);
}
}
fn main() {
let args = env::args().collect::<Vec<_>>();
let output = match &args[..] {
[me] => Command::new(&me).arg("plant the").output(),
[..] => std::panic::panic_any(Bomb),
}.expect("running the command should have succeeded");
println!("{:#?}", output);
let stderr = std::str::from_utf8(&output.stderr);
assert!(stderr.map(|v| {
v.ends_with("drop of the panic payload panicked")
}).unwrap_or(false));
}