[binutils-gdb] pr34322: assertion failure in get_or_create_member_type
Alan Modra via Binutils-cvs <[email protected]> Sat, 4 Jul 2026 10:55:53 +0000 (GMT)
| Newsgroups | gmane.comp.gnu.binutils.cvs |
|---|---|
| Message-ID | <[email protected]> |
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=58b8db1ca4e6021161511cb24b18a48fcf8e5546 commit 58b8db1ca4e6021161511cb24b18a48fcf8e5546 Author: Alan Modra <[email protected]> Date: Sat Jul 4 19:57:43 2026 +0930 pr34322: assertion failure in get_or_create_member_type 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. Diff: --- binutils/dwarf.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/binutils/dwarf.c b/binutils/dwarf.c index f915495f6b3..829bcb761f7 100644 --- a/binutils/dwarf.c +++ b/binutils/dwarf.c @@ -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) {