From c3de306156696e01d8c240250b81c2daf0ca5c37 Mon Sep 17 00:00:00 2001 From: Sai Asish Y Date: Fri, 12 Jun 2026 23:55:24 -0700 Subject: [PATCH] Fix ARM panic when a code section has no mapping symbols Signed-off-by: Sai Asish Y --- objdiff-core/src/arch/arm.rs | 1 + objdiff-core/tests/arch_arm.rs | 19 +++++++++++++++++++ objdiff-core/tests/data/arm/issue_352.o | Bin 0 -> 1020 bytes 3 files changed, 20 insertions(+) create mode 100644 objdiff-core/tests/data/arm/issue_352.o diff --git a/objdiff-core/src/arch/arm.rs b/objdiff-core/src/arch/arm.rs index 35416c9f..ba839cdd 100644 --- a/objdiff-core/src/arch/arm.rs +++ b/objdiff-core/src/arch/arm.rs @@ -184,6 +184,7 @@ impl Arch for ArchArm { .disasm_modes .get(§ion_index) .map(|x| x.as_slice()) + .filter(|x| !x.is_empty()) .unwrap_or(&fallback_mappings); let first_mapping_idx = mapping_symbols .binary_search_by_key(&start_addr, |x| x.address) diff --git a/objdiff-core/tests/arch_arm.rs b/objdiff-core/tests/arch_arm.rs index 9c507e1d..caab3a71 100644 --- a/objdiff-core/tests/arch_arm.rs +++ b/objdiff-core/tests/arch_arm.rs @@ -98,3 +98,22 @@ fn trim_trailing_hword() { let output = common::display_diff(&obj, &diff, symbol_idx, &diff_config); insta::assert_snapshot!(output); } + +#[test] +#[cfg(feature = "arm")] +fn no_mapping_symbols_in_text() { + // A .text section that contains code bytes but is not covered by any + // mapping symbol must not panic while scanning instructions. + let diff_config = diff::DiffObjConfig::default(); + let obj = obj::read::parse( + include_object!("data/arm/issue_352.o"), + &diff_config, + diff::DiffSide::Base, + ) + .unwrap(); + for (symbol_idx, symbol) in obj.symbols.iter().enumerate() { + if symbol.section.is_some() && symbol.size > 0 { + let _ = diff::code::no_diff_code(&obj, symbol_idx, &diff_config); + } + } +} diff --git a/objdiff-core/tests/data/arm/issue_352.o b/objdiff-core/tests/data/arm/issue_352.o new file mode 100644 index 0000000000000000000000000000000000000000..6b13eaa79697e42cd8e5aa147d3d07968f01ff3d GIT binary patch literal 1020 zcmb<-^>JflWMqH=Mg|QA1doB?2@^!d1Wai#urshR{J;1AIRekWJ<-NQ^VRlSdp=A0 zwdy^|exfi_rGu@p?5Af$>-DGpdL8ciWzVM1PE<)gzvBVl19qpd^!4TOyR@Hc9GsLa z|KlgqUo**l_iax_|8_l}krRG4%GH1Bsjd1?=5QYme0Z>G!8W0<6X$(hyCvqN!%~kN z;F(6oMc&D8xW~cOd-%i4RI2Kalv^ zKsLx4n0khk#FE5#10#cE zGl&ENy^_?55(d5EjN+1_lEfq+3r1Jwg84