From a138dfa90780d02c40bdb9dac6a0df5f5aec53b0 Mon Sep 17 00:00:00 2001 From: Luke Street Date: Tue, 2 Sep 2025 19:11:07 -0600 Subject: [PATCH] Gracefully handle OOB in symbol_context/symbol_hover Resolves decomp.me#1576 --- Cargo.lock | 50 +++++++++----------------------- objdiff-core/src/diff/display.rs | 8 +++-- 2 files changed, 20 insertions(+), 38 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9cfa944..063a9a8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1898,8 +1898,8 @@ dependencies = [ "aho-corasick", "bstr", "log", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", + "regex-automata", + "regex-syntax", "serde", ] @@ -2832,11 +2832,11 @@ dependencies = [ [[package]] name = "matchers" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "regex-automata 0.1.10", + "regex-automata", ] [[package]] @@ -3092,12 +3092,11 @@ checksum = "5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d" [[package]] name = "nu-ansi-term" -version = "0.46.0" +version = "0.50.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" dependencies = [ - "overload", - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -3684,12 +3683,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "owned_ttf_parser" version = "0.25.1" @@ -4312,17 +4305,8 @@ checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", + "regex-automata", + "regex-syntax", ] [[package]] @@ -4333,15 +4317,9 @@ checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - [[package]] name = "regex-syntax" version = "0.8.5" @@ -5563,14 +5541,14 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" dependencies = [ "matchers", "nu-ansi-term", "once_cell", - "regex", + "regex-automata", "sharded-slab", "smallvec", "thread_local", diff --git a/objdiff-core/src/diff/display.rs b/objdiff-core/src/diff/display.rs index ef8b7ed..ac1f6d2 100644 --- a/objdiff-core/src/diff/display.rs +++ b/objdiff-core/src/diff/display.rs @@ -379,7 +379,9 @@ pub enum HoverItem { } pub fn symbol_context(obj: &Object, symbol_index: usize) -> Vec { - let symbol = &obj.symbols[symbol_index]; + let Some(symbol) = obj.symbols.get(symbol_index) else { + return Vec::new(); + }; let mut out = Vec::new(); out.push(ContextItem::Copy { value: symbol.name.clone(), label: None }); if let Some(name) = &symbol.demangled_name { @@ -403,7 +405,9 @@ pub fn symbol_hover( addend: i64, override_color: Option, ) -> Vec { - let symbol = &obj.symbols[symbol_index]; + let Some(symbol) = obj.symbols.get(symbol_index) else { + return Vec::new(); + }; let addend_str = match addend.cmp(&0i64) { Ordering::Greater => format!("+{addend:x}"), Ordering::Less => format!("-{:x}", -addend),