aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2025-08-19 09:15:22 +0930
committerAlan Modra <amodra@gmail.com>2025-08-19 09:31:06 +0930
commit74201a32082c061a3b966fa3189e97eefbd87c2b (patch)
treeefb4625e7684cadf7e3c731b0e4af0d1f66f365e
parentc022c513767753fa669ad8da5c0c6f12da4aa26a (diff)
downloadbinutils-74201a32082c061a3b966fa3189e97eefbd87c2b.zip
binutils-74201a32082c061a3b966fa3189e97eefbd87c2b.tar.gz
binutils-74201a32082c061a3b966fa3189e97eefbd87c2b.tar.bz2
Re: windres: don't exit so much on errors in read_coff_rsrc
oss-fuzz found that I missed some error paths in commit 9e68cae4fd. This fix prevents reads of a NULL pointer in sort_resources. * rescoff.c (read_coff_res_dir): Check return of recursive calls and read_coff_data_entry calls. Pass failures up the call chain.
-rw-r--r--binutils/rescoff.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/binutils/rescoff.c b/binutils/rescoff.c
index 14546a4..efcdba4 100644
--- a/binutils/rescoff.c
+++ b/binutils/rescoff.c
@@ -308,6 +308,8 @@ read_coff_res_dir (windres_bfd *wrbfd, const bfd_byte *data,
re->subdir = 1;
re->u.dir = read_coff_res_dir (wrbfd, flaginfo->data + rva, flaginfo,
type, level + 1);
+ if (re->u.dir == NULL)
+ return NULL;
}
else
{
@@ -319,6 +321,8 @@ read_coff_res_dir (windres_bfd *wrbfd, const bfd_byte *data,
re->subdir = 0;
re->u.res = read_coff_data_entry (wrbfd, flaginfo->data + rva,
flaginfo, type);
+ if (re->u.res == NULL)
+ return NULL;
}
*pp = re;
@@ -359,6 +363,8 @@ read_coff_res_dir (windres_bfd *wrbfd, const bfd_byte *data,
re->subdir = 1;
re->u.dir = read_coff_res_dir (wrbfd, flaginfo->data + rva, flaginfo,
type, level + 1);
+ if (re->u.dir == NULL)
+ return NULL;
}
else
{
@@ -370,6 +376,8 @@ read_coff_res_dir (windres_bfd *wrbfd, const bfd_byte *data,
re->subdir = 0;
re->u.res = read_coff_data_entry (wrbfd, flaginfo->data + rva,
flaginfo, type);
+ if (re->u.res == NULL)
+ return NULL;
}
*pp = re;