From: Alan Modra Date: Thu, 1 Aug 2024 11:06:42 +0000 (+0930) Subject: skip_attr_bytes assertion (data) <= (end) fail X-Git-Tag: gdb-16-branchpoint~1252 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=479c61163612f37d853efd21c40963459ef611d4;p=thirdparty%2Fbinutils-gdb.git skip_attr_bytes assertion (data) <= (end) fail get_type_abbrev_from_form is lax in not limiting data for a uleb to the current CU, because DW_FORM_ref_addr allows access to other CU's data. This can lead to an assertion fail when skipping or reading attributes in get_type_signedness. * dwarf.c (get_type_abbrev_from_form): Limit uleb data to map end for ref_addr, cu_end otherwise. --- diff --git a/binutils/dwarf.c b/binutils/dwarf.c index 972bb920161..13a91624200 100644 --- a/binutils/dwarf.c +++ b/binutils/dwarf.c @@ -2119,7 +2119,10 @@ get_type_abbrev_from_form (unsigned long form, *map_return = NULL; } - READ_ULEB (abbrev_number, data, section->start + section->size); + if (form == DW_FORM_ref_addr) + cu_end = section->start + map->end; + + READ_ULEB (abbrev_number, data, cu_end); for (entry = map->list->first_abbrev; entry != NULL; entry = entry->next) if (entry->number == abbrev_number)