diff options
| author | Mason Reed <mason@vector35.com> | 2025-02-04 13:39:05 -0500 |
|---|---|---|
| committer | Mason Reed <mason@vector35.com> | 2025-02-04 13:39:05 -0500 |
| commit | f097e0a204958cfab61ea0607223f8286cd437da (patch) | |
| tree | 72610d3f6675ecab539333019984d041fb26fcac /plugins/dwarf | |
| parent | d6856d77526cddf915e235a5842f2e57c8b33284 (diff) | |
Fix crash with unnamed function self reference in DWARF import
Diffstat (limited to 'plugins/dwarf')
| -rw-r--r-- | plugins/dwarf/dwarf_import/src/die_handlers.rs | 16 |
1 files changed, 5 insertions, 11 deletions
diff --git a/plugins/dwarf/dwarf_import/src/die_handlers.rs b/plugins/dwarf/dwarf_import/src/die_handlers.rs index 4d013092..81e13308 100644 --- a/plugins/dwarf/dwarf_import/src/die_handlers.rs +++ b/plugins/dwarf/dwarf_import/src/die_handlers.rs @@ -316,11 +316,9 @@ pub(crate) fn handle_function<R: ReaderType>( }; // Alias function type in the case that it contains itself - if let Some(name) = debug_info_builder_context.get_name(dwarf, unit, entry) { - let ntr = - Type::named_type_from_type(&name, &Type::function(return_type.as_ref(), vec![], false)); - debug_info_builder.add_type(get_uid(dwarf, unit, entry), name, ntr, false); - } + let name = debug_info_builder_context.get_name(dwarf, unit, entry).unwrap_or("_unnamed_func".to_string()); + let ntr = Type::named_type_from_type(&name, &Type::function(return_type.as_ref(), vec![], false)); + debug_info_builder.add_type(get_uid(dwarf, unit, entry), name, ntr, false); let mut parameters: Vec<FunctionParameter> = vec![]; let mut variable_arguments = false; @@ -350,12 +348,8 @@ pub(crate) fn handle_function<R: ReaderType>( } } - if debug_info_builder_context - .get_name(dwarf, unit, entry) - .is_some() - { - debug_info_builder.remove_type(get_uid(dwarf, unit, entry)); - } + // Remove the aliased type from the builder. + debug_info_builder.remove_type(get_uid(dwarf, unit, entry)); Some(Type::function( return_type.as_ref(), |
