From aa191a981d19cb47534821ecc7400182ed23874a Mon Sep 17 00:00:00 2001 From: Clement Tsang <34804052+ClementTsang@users.noreply.github.com> Date: Tue, 27 Jun 2023 01:57:32 -0400 Subject: [PATCH] bug: fix core dump if the terminal is closed while bottom is open (#1230) * bug: fix core dump if the terminal is closed The cause was: - bottom thinks it's panicking if the terminal is closed. - The panic hook tried to print out to the terminal - but the terminal was closed! It would unwrap and thus panic even harder. - To solve this, we just make the panic hook calls not unwrap, since honestly if they fail it's whatever as far as I understand it. * update changelog --- CHANGELOG.md | 6 ++++++ Cargo.lock | 2 +- Cargo.toml | 6 ++---- src/lib.rs | 29 +++++++++++++---------------- 4 files changed, 22 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a7c54d36..71c522cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.9.3]/[0.10.0] - Unreleased + +## Bug Fixes + +- [#1230](https://github.com/ClementTsang/bottom/pull/1230): Fix core dump if the terminal is closed while bottom is open. + ## [0.9.3] - 2023-06-25 ## Bug Fixes diff --git a/Cargo.lock b/Cargo.lock index d8caf1b4..474cccb1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -142,7 +142,7 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bottom" -version = "0.9.3" +version = "0.9.4" dependencies = [ "anyhow", "assert_cmd", diff --git a/Cargo.toml b/Cargo.toml index dfd8b9b2..8813e73a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bottom" -version = "0.9.3" +version = "0.9.4" authors = ["Clement Tsang "] edition = "2021" repository = "https://github.com/ClementTsang/bottom" @@ -133,9 +133,7 @@ filedescriptor = "0.8.2" [dev-dependencies] assert_cmd = "2.0.11" -cargo-husky = { version = "1.5.0", default-features = false, features = [ - "user-hooks", -] } +cargo-husky = { version = "1.5.0", default-features = false, features = ["user-hooks"] } predicates = "3.0.3" [build-dependencies] diff --git a/src/lib.rs b/src/lib.rs index 86d36cb7..e3249244 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -293,7 +293,7 @@ pub fn check_if_terminal() { } /// A panic hook to properly restore the terminal in the case of a panic. -/// Based on [spotify-tui's implementation](https://github.com/Rigellute/spotify-tui/blob/master/src/main.rs). +/// Originally based on [spotify-tui's implementation](https://github.com/Rigellute/spotify-tui/blob/master/src/main.rs). pub fn panic_hook(panic_info: &PanicInfo<'_>) { let mut stdout = stdout(); @@ -305,28 +305,25 @@ pub fn panic_hook(panic_info: &PanicInfo<'_>) { }, }; - let stacktrace: String = format!("{:?}", backtrace::Backtrace::new()); + let stacktrace = format!("{:?}", backtrace::Backtrace::new()); - disable_raw_mode().unwrap(); - execute!( + let _ = disable_raw_mode(); + let _ = execute!( stdout, DisableBracketedPaste, DisableMouseCapture, LeaveAlternateScreen - ) - .unwrap(); + ); // Print stack trace. Must be done after! - execute!( - stdout, - Print(format!( - "thread '' panicked at '{}', {}\n\r{}", - msg, - panic_info.location().unwrap(), - stacktrace - )), - ) - .unwrap(); + if let Some(panic_info) = panic_info.location() { + let _ = execute!( + stdout, + Print(format!( + "thread '' panicked at '{msg}', {panic_info}\n\r{stacktrace}", + )), + ); + } } pub fn update_data(app: &mut App) {