[binutils-gdb] rescoff: ensure file is PE
Alan Modra
amodra@sourceware.org
Mon Mar 3 21:54:07 GMT 2025
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=7166166ec098b998dbd48e90be40ce880f7d46de
commit 7166166ec098b998dbd48e90be40ce880f7d46de
Author: Alan Modra <amodra@gmail.com>
Date: Thu Feb 27 20:53:43 2025 +1030
rescoff: ensure file is PE
read_coff_rsrc makes one check on object file contents, the existence
of a .rsrc section. It doesn't check that the file is PE but blindly
accesses bfd pe_data. Fix that by adding the necessary checks.
Also, the "resources nest too deep" error isn't an overrun, ie. the
"address out of bounds" message isn't correct. Fix that too.
Diff:
---
binutils/rescoff.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/binutils/rescoff.c b/binutils/rescoff.c
index 200d0a3988c..f9a1e70d162 100644
--- a/binutils/rescoff.c
+++ b/binutils/rescoff.c
@@ -133,6 +133,9 @@ read_coff_rsrc (const char *filename, const char *target)
list_matching_formats (matching);
xexit (1);
}
+ if (bfd_get_flavour (abfd) != bfd_target_coff_flavour
+ || !obj_pe (abfd))
+ fatal (_("%s: not a PE file"), filename);
sec = bfd_get_section_by_name (abfd, ".rsrc");
if (sec == NULL)
@@ -196,7 +199,7 @@ read_coff_res_dir (windres_bfd *wrbfd, const bfd_byte *data,
Microsoft only defines 3 levels. Corrupt files however might
claim to use more. */
if (level > 4)
- overrun (flaginfo, _("Resources nest too deep"));
+ fatal (_("%s: resources nest too deep"), flaginfo->filename);
if ((size_t) (flaginfo->data_end - data) < sizeof (struct extern_res_directory))
overrun (flaginfo, _("directory"));
More information about the Binutils-cvs
mailing list