]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
pr34322: assertion failure in get_or_create_member_type
authorAlan Modra <amodra@gmail.com>
Sat, 4 Jul 2026 10:27:43 +0000 (19:57 +0930)
committerAlan Modra <amodra@gmail.com>
Sat, 4 Jul 2026 10:41:54 +0000 (20:11 +0930)
I thought about warning "DW_TAG_member without struct/union parent"
here but decided that doesn't help much as the warning is disconnected
from output.  As it is the --map-global-vars code silently ignores
unexpected attributes that might be found in fuzzed files.  I'm fine
with that too.

PR 34322
* dwarf.c (get_or_create_member_type): Return NULL on NULL parent.
(insert_element_in_list): Ignore DW_TAG_member without struct
or union parent.

binutils/dwarf.c

index f915495f6b3795ce6840c86670ec42cb81b3edc1..829bcb761f74389bff23da7c1f8eb22cf3bb1e17 100644 (file)
@@ -2919,7 +2919,8 @@ display_member_type (const member_type mt)
 static member_type *
 get_or_create_member_type (member_parent *parent, uint64_t die_offset)
 {
-  assert (parent != NULL);
+  if (parent == NULL)
+    return NULL;
   if (parent->member_tail == NULL
       || parent->member_tail->die_offset != die_offset)
     {
@@ -3371,6 +3372,8 @@ insert_element_in_list (enum dwarf_tag dw_tag,
          mt = get_or_create_member_type (union_type_list.tail, die_offset);
        else
          mt = get_or_create_member_type (struct_type_list.tail, die_offset);
+       if (mt == NULL)
+         break;
 
        if (dw_attr == DW_AT_name)
          {