From 922c605d69eaa680180e426b51ec33639f9a63c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lauren=C8=9Biu=20Leahu-Vl=C4=83ducu?= Date: Fri, 24 Jan 2025 16:29:10 +0100 Subject: [PATCH] rest-server: Improved panic errors with formatted strings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Improved errors when panics occur and the panic message is a formatted (not static) string. This worked already for &str literals, but not for Strings. Downcasting to both &str and String is also done by the Rust Standard Library in the default panic handler. See: https://github.com/rust-lang/rust/blob/b605c65b6eb5fa71783f8e26df69975f9f1680ee/library/std/src/panicking.rs#L777 Signed-off-by: Laurențiu Leahu-Vlăducu --- proxmox-rest-server/src/worker_task.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/proxmox-rest-server/src/worker_task.rs b/proxmox-rest-server/src/worker_task.rs index beec691e..24e2676e 100644 --- a/proxmox-rest-server/src/worker_task.rs +++ b/proxmox-rest-server/src/worker_task.rs @@ -980,9 +980,14 @@ impl WorkerTask { let result = match std::panic::catch_unwind(move || f(worker1)) { Ok(r) => r, - Err(panic) => match panic.downcast::<&str>() { - Ok(panic_msg) => Err(format_err!("worker panicked: {}", panic_msg)), - Err(_) => Err(format_err!("worker panicked: unknown type.")), + Err(panic) => { + if let Some(panic_msg) = panic.downcast_ref::<&str>() { + Err(format_err!("worker panicked: {panic_msg}")) + } else if let Some(panic_msg) = panic.downcast_ref::() { + Err(format_err!("worker panicked: {panic_msg}")) + } else { + Err(format_err!("worker panicked: cannot show error message due to unknown error type.")) + } }, };