[binutils-gdb] thin archive with nested archive memory leak

Alan Modra amodra@sourceware.org
Wed Jan 1 12:46:14 GMT 2025


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

commit bc67f5df706ff54348b386669cadd686cdae0e71
Author: Alan Modra <amodra@gmail.com>
Date:   Wed Jan 1 22:51:34 2025 +1030

    thin archive with nested archive memory leak
    
    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.

Diff:
---
 bfd/archive.c | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/bfd/archive.c b/bfd/archive.c
index ee63ed76a90..b3019e21059 100644
--- a/bfd/archive.c
+++ b/bfd/archive.c
@@ -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


More information about the Binutils-cvs mailing list