]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Re: windres: don't exit so much on errors in read_coff_rsrc
authorAlan Modra <amodra@gmail.com>
Mon, 18 Aug 2025 23:45:22 +0000 (09:15 +0930)
committerAlan Modra <amodra@gmail.com>
Tue, 19 Aug 2025 00:01:06 +0000 (09:31 +0930)
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.

binutils/rescoff.c

index 14546a4b91ce7a38c5459661dcd6a4654fe98e62..efcdba4297a09c0ae287bbb85cc97fa8e83daff3 100644 (file)
@@ -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;