Re: Memory leak in dwarf2.c
authorAlan Modra <amodra@gmail.com>
Mon, 2 Sep 2019 07:18:44 +0000 (16:48 +0930)
committerAlan Modra <amodra@gmail.com>
Mon, 2 Sep 2019 07:20:22 +0000 (16:50 +0930)
PR 11983
* dwarf2.c (read_alt_indirect_string): Free debug_filename
on success.  Tidy.
(read_alt_indirect_ref): Likewise.

bfd/ChangeLog
bfd/dwarf2.c

index 47f694a..f033af7 100644 (file)
@@ -3,6 +3,8 @@
        PR 11983
        * dwarf2.c (_bfd_dwarf2_slurp_debug_info): Free debug_filename
        on success.  Tidy.
+       (read_alt_indirect_string): Likewise.
+       (read_alt_indirect_ref): Likewise.
 
 2019-08-31  Jim Wilson  <jimw@sifive.com>
 
index 88638b9..ed6dcd4 100644 (file)
@@ -802,20 +802,21 @@ read_alt_indirect_string (struct comp_unit * unit,
 
   if (stash->alt_bfd_ptr == NULL)
     {
-      bfd *  debug_bfd;
-      char * debug_filename = bfd_follow_gnu_debugaltlink (unit->abfd, DEBUGDIR);
+      bfd *debug_bfd;
+      char *debug_filename = bfd_follow_gnu_debugaltlink (unit->abfd, DEBUGDIR);
 
       if (debug_filename == NULL)
        return NULL;
 
-      if ((debug_bfd = bfd_openr (debug_filename, NULL)) == NULL
-         || ! bfd_check_format (debug_bfd, bfd_object))
-       {
-         if (debug_bfd)
-           bfd_close (debug_bfd);
+      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 NULL;
 
-         /* FIXME: Should we report our failure to follow the debuglink ?  */
-         free (debug_filename);
+      if (!bfd_check_format (debug_bfd, bfd_object))
+       {
+         bfd_close (debug_bfd);
          return NULL;
        }
       stash->alt_bfd_ptr = debug_bfd;
@@ -850,20 +851,21 @@ read_alt_indirect_ref (struct comp_unit * unit,
 
   if (stash->alt_bfd_ptr == NULL)
     {
-      bfd *  debug_bfd;
-      char * debug_filename = bfd_follow_gnu_debugaltlink (unit->abfd, DEBUGDIR);
+      bfd *debug_bfd;
+      char *debug_filename = bfd_follow_gnu_debugaltlink (unit->abfd, DEBUGDIR);
 
       if (debug_filename == NULL)
        return FALSE;
 
-      if ((debug_bfd = bfd_openr (debug_filename, NULL)) == NULL
-         || ! bfd_check_format (debug_bfd, bfd_object))
-       {
-         if (debug_bfd)
-           bfd_close (debug_bfd);
+      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 NULL;
 
-         /* FIXME: Should we report our failure to follow the debuglink ?  */
-         free (debug_filename);
+      if (!bfd_check_format (debug_bfd, bfd_object))
+       {
+         bfd_close (debug_bfd);
          return NULL;
        }
       stash->alt_bfd_ptr = debug_bfd;