]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
thin archive with nested archive memory leak
authorAlan Modra <amodra@gmail.com>
Wed, 1 Jan 2025 12:21:34 +0000 (22:51 +1030)
committerAlan Modra <amodra@gmail.com>
Wed, 1 Jan 2025 12:21:34 +0000 (22:51 +1030)
The only reason to keep new_areldata around was for access to the
filename, but we now always take a copy in alloc'd memory.

* archive.c (_bfd_get_elt_at_filepos): Free new_areldata when
it is not attached to bfd.

bfd/archive.c

index ee63ed76a902c68ec5c39b99a0c560c226ce12cf..b3019e21059d1dab99bfeae6c81c45f355fead61 100644 (file)
@@ -708,20 +708,15 @@ _bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos,
          /* This proxy entry refers to an element of a nested archive.
             Locate the member of that archive and return a bfd for it.  */
          bfd *ext_arch = find_nested_archive (filename, archive);
+         file_ptr origin = new_areldata->origin;
 
+         free (new_areldata);
          if (ext_arch == NULL
              || ! bfd_check_format (ext_arch, bfd_archive))
-           {
-             free (new_areldata);
-             return NULL;
-           }
-         n_bfd = _bfd_get_elt_at_filepos (ext_arch,
-                                          new_areldata->origin, info);
+           return NULL;
+         n_bfd = _bfd_get_elt_at_filepos (ext_arch, origin, info);
          if (n_bfd == NULL)
-           {
-             free (new_areldata);
-             return NULL;
-           }
+           return NULL;
          n_bfd->proxy_origin = bfd_tell (archive);
 
          /* Copy BFD_COMPRESS, BFD_DECOMPRESS and BFD_COMPRESS_GABI