From: Alan Modra Date: Mon, 18 Aug 2025 23:45:22 +0000 (+0930) Subject: Re: windres: don't exit so much on errors in read_coff_rsrc X-Git-Tag: gdb-17-branchpoint~258 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=74201a32082c061a3b966fa3189e97eefbd87c2b;p=thirdparty%2Fbinutils-gdb.git 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. --- diff --git a/binutils/rescoff.c b/binutils/rescoff.c index 14546a4b91c..efcdba4297a 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;