thin archive with nested archive memory leak

Message ID Z3U3cT-A2B2bTrCe@squeak.grove.modra.org
State New
Headers
Series thin archive with nested archive memory leak |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_binutils_build--master-arm fail Patch failed to apply
linaro-tcwg-bot/tcwg_binutils_build--master-aarch64 fail Patch failed to apply

Commit Message

Alan Modra Jan. 1, 2025, 12:39 p.m. UTC
  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.
  

Patch

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