From d92f60bc1cb5ee88a9cce69d004f15c81618fdea Mon Sep 17 00:00:00 2001 From: KyleMiles Date: Tue, 16 Jan 2024 16:56:07 -0500 Subject: DWARF Import : Detect and resolve trivial infinite abstract origin cycles --- rust/examples/dwarf/dwarf_import/src/helpers.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'rust/examples') diff --git a/rust/examples/dwarf/dwarf_import/src/helpers.rs b/rust/examples/dwarf/dwarf_import/src/helpers.rs index 4788df76..ed40d446 100644 --- a/rust/examples/dwarf/dwarf_import/src/helpers.rs +++ b/rust/examples/dwarf/dwarf_import/src/helpers.rs @@ -92,8 +92,11 @@ pub(crate) fn resolve_specification<'a, R: Reader>( ) { match die_reference { DieReference::UnitAndOffset((entry_unit, entry_offset)) => { - if let Ok(entry) = entry_unit.entry(entry_offset) { - resolve_specification(entry_unit, &entry, debug_info_builder_context) + if entry_offset == entry.offset() { + warn!("DWARF information is invalid (infinite abstract origin reference cycle). Debug information may be incomplete."); + DieReference::Err + } else if let Ok(new_entry) = entry_unit.entry(entry_offset) { + resolve_specification(entry_unit, &new_entry, debug_info_builder_context) } else { warn!("Failed to fetch DIE. Debug information may be incomplete."); DieReference::Err -- cgit v1.3.1