PR29653, objcopy/strip: fuzzed small input file induces large output file
authorAlan Modra <amodra@gmail.com>
Thu, 6 Oct 2022 23:53:05 +0000 (10:23 +1030)
committerAlan Modra <amodra@gmail.com>
Fri, 7 Oct 2022 02:00:28 +0000 (12:30 +1030)
commitea4e4a19b7f6c192c307b5a37c67d141f3aea074
tree7428330c72d7adb92a9e32032ba7041c3c42d8b3
parentfea044ba7b5ed9be93ce49b36188edbba7fcebb3
PR29653, objcopy/strip: fuzzed small input file induces large output file

_bfd_check_format functions should not print errors or warnings if
they return NULL.  A NULL return means the particular target under
test does not match, so there isn't any reason to make a complaint
about the target.  In fact there isn't a good reason to warn even if
the target matches, except via the _bfd_per_xvec_warn mechanism; Some
other target might be a better match.

This patch tidies pe_bfd_object_p with the above in mind, and
restricts the PE optional header SectionAlignment and FileAlignment
fields somewhat.  I chose to warn on nonsense values rather than
refusing to match.  Refusing to match would be OK too.

PR 29653
* peXXigen.c (_bfd_XXi_swap_aouthdr_in): Don't emit error about
invalid NumberOfRvaAndSizes here.  Limit loop copying data
directory to IMAGE_NUMBEROF_DIRECTORY_ENTRIES.
* peicode.h (pe_bfd_object_p): Don't clear and test bfd_error
around bfd_coff_swap_aouthdr_in.  Warn on invalid SectionAlignment,
FileAlignment and NumberOfRvaAndSizes.  Don't return NULL on
invalid NumberOfRvaAndSizes.
bfd/peXXigen.c
bfd/peicode.h