From: Alan Modra Date: Wed, 1 Jan 2025 12:21:34 +0000 (+1030) Subject: thin archive with nested archive memory leak X-Git-Tag: binutils-2_44~291 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bc67f5df706ff54348b386669cadd686cdae0e71;p=thirdparty%2Fbinutils-gdb.git 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 --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