diff options
| author | Josh Ferrell <josh@vector35.com> | 2024-07-05 12:15:21 -0400 |
|---|---|---|
| committer | Josh Ferrell <josh@vector35.com> | 2024-07-05 12:20:33 -0400 |
| commit | 0dc909f1800296619053e067a1e3700665f4644c (patch) | |
| tree | 5851a0791c03e7e5fce55f8ba6da3910f0e6e988 /rust/examples/dwarf/dwarf_import/src/die_handlers.rs | |
| parent | 98db31c6f2442aac6b3d6687e0200fa61acc8d3b (diff) | |
Fix crash when parsing enums from zig dwarf info
Diffstat (limited to 'rust/examples/dwarf/dwarf_import/src/die_handlers.rs')
| -rw-r--r-- | rust/examples/dwarf/dwarf_import/src/die_handlers.rs | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/rust/examples/dwarf/dwarf_import/src/die_handlers.rs b/rust/examples/dwarf/dwarf_import/src/die_handlers.rs index 24ef30fb..e6530dd2 100644 --- a/rust/examples/dwarf/dwarf_import/src/die_handlers.rs +++ b/rust/examples/dwarf/dwarf_import/src/die_handlers.rs @@ -108,16 +108,17 @@ pub(crate) fn handle_enum<R: Reader<Offset = usize>>( while let Ok(Some(child)) = children.next() { if child.entry().tag() == constants::DW_TAG_enumerator { let name = debug_info_builder_context.get_name(unit, child.entry())?; - let value = get_attr_as_u64( - &child - .entry() - .attr(constants::DW_AT_const_value) - .unwrap() - .unwrap(), - ) - .unwrap(); - - enumeration_builder.insert(name, value); + let attr = &child + .entry() + .attr(constants::DW_AT_const_value) + .unwrap() + .unwrap(); + if let Some(value) = get_attr_as_u64(attr) { + enumeration_builder.insert(name, value); + } else { + log::error!("Unhandled enum member value type - please report this"); + return None; + } } } |
