[binutils-gdb] Memory leak in dwarf2.c

Alan Modra amodra@sourceware.org
Mon Sep 2 01:33:00 GMT 2019


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

commit 22b31fea07587034636251ccb81041e4e8e0bd93
Author: Alan Modra <amodra@gmail.com>
Date:   Mon Sep 2 09:54:55 2019 +0930

    Memory leak in dwarf2.c
    
    This fixes a small leak of debug_filename.  bfd_openr copies the file
    name since git commit 1be5090bca.
    
    	PR 11983
    	* dwarf2.c (_bfd_dwarf2_slurp_debug_info): Free debug_filename
    	on success.  Tidy.

Diff:
---
 bfd/ChangeLog |  6 ++++++
 bfd/dwarf2.c  | 16 +++++++++-------
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 2b06383..47f694a 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2019-09-02  Alan Modra  <amodra@gmail.com>
+
+	PR 11983
+	* dwarf2.c (_bfd_dwarf2_slurp_debug_info): Free debug_filename
+	on success.  Tidy.
+
 2019-08-31  Jim Wilson  <jimw@sifive.com>
 
 	PR 23825
diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c
index a8beec4..88638b9 100644
--- a/bfd/dwarf2.c
+++ b/bfd/dwarf2.c
@@ -4385,18 +4385,20 @@ _bfd_dwarf2_slurp_debug_info (bfd *abfd, bfd *debug_bfd,
 	   fail more quickly.  */
 	return FALSE;
 
+      debug_bfd = bfd_openr (debug_filename, NULL);
+      free (debug_filename);
+      if (debug_bfd == NULL)
+	/* FIXME: Should we report our failure to follow the debuglink ?  */
+	return FALSE;
+
       /* Set BFD_DECOMPRESS to decompress debug sections.  */
-      if ((debug_bfd = bfd_openr (debug_filename, NULL)) == NULL
-	  || !(debug_bfd->flags |= BFD_DECOMPRESS,
-	       bfd_check_format (debug_bfd, bfd_object))
+      debug_bfd->flags |= BFD_DECOMPRESS;
+      if (!bfd_check_format (debug_bfd, bfd_object)
 	  || (msec = find_debug_info (debug_bfd,
 				      debug_sections, NULL)) == NULL
 	  || !bfd_generic_link_read_symbols (debug_bfd))
 	{
-	  if (debug_bfd)
-	    bfd_close (debug_bfd);
-	  /* FIXME: Should we report our failure to follow the debuglink ?  */
-	  free (debug_filename);
+	  bfd_close (debug_bfd);
 	  return FALSE;
 	}



More information about the Binutils-cvs mailing list