coffgrok access of u.auxent.x_sym.x_tagndx.p
authorAlan Modra <amodra@gmail.com>
Sun, 26 Mar 2023 08:56:46 +0000 (19:26 +1030)
committerAlan Modra <amodra@gmail.com>
Mon, 27 Mar 2023 11:28:46 +0000 (21:58 +1030)
commit695c322803476e92e1566c90470b6bb737a40514
tree1f639732ff39372a82e6c643542d1372fbc1e472
parent92479281c4621e8d71565f76b879e36bf92b0b18
coffgrok access of u.auxent.x_sym.x_tagndx.p

u.auxent.x_sym.x_tagndx is a union.  The p field is only valid when
fix_tag is set.  This patch fixes code in coffgrok.c that accessed the
field without first checking fix_tag, and removes a whole lot of code
validating bogus pointers to prevent segfaults (which no longer
happen, I checked the referenced PR 17512 testcases).  The patch also
documents this in the fix_tag comment, makes is_sym a bitfield, and
sorts the selecter fields a little.

bfd/
* coffcode.h (combined_entry_type): Make is_sym a bitfield.
Sort and comment on union selectors.
* libcoff.h: Regenerate.
binutils/
* coffgrok.c (do_type): Make aux a combined_entry_type.  Test
fix_tag before accessing u.auxent.x_sym.x_tagndx.p.  Remove
now unnecessary pointer bounds checking.
bfd/coffcode.h
bfd/libcoff.h
binutils/coffgrok.c