[binutils-gdb] Re: windres: don't exit so much on errors in read_coff_rsrc

Alan Modra amodra@sourceware.org
Tue Aug 19 00:02:42 GMT 2025


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=74201a32082c061a3b966fa3189e97eefbd87c2b

commit 74201a32082c061a3b966fa3189e97eefbd87c2b
Author: Alan Modra <amodra@gmail.com>
Date:   Tue Aug 19 09:15:22 2025 +0930

    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:
---
 binutils/rescoff.c | 8 ++++++++
 1 file changed, 8 insertions(+)

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;


More information about the Binutils-cvs mailing list