Re: Memory leak in dwarf2.c

PR 11983
	* dwarf2.c (read_alt_indirect_string): Free debug_filename
	on success.  Tidy.
	(read_alt_indirect_ref): Likewise.
This commit is contained in:
Alan Modra
2019-09-02 16:48:44 +09:30
parent 22b31fea07
commit 217d2eaa69
2 changed files with 22 additions and 18 deletions

View File

@ -3,6 +3,8 @@
PR 11983 PR 11983
* dwarf2.c (_bfd_dwarf2_slurp_debug_info): Free debug_filename * dwarf2.c (_bfd_dwarf2_slurp_debug_info): Free debug_filename
on success. Tidy. on success. Tidy.
(read_alt_indirect_string): Likewise.
(read_alt_indirect_ref): Likewise.
2019-08-31 Jim Wilson <jimw@sifive.com> 2019-08-31 Jim Wilson <jimw@sifive.com>

View File

@ -802,20 +802,21 @@ read_alt_indirect_string (struct comp_unit * unit,
if (stash->alt_bfd_ptr == NULL) if (stash->alt_bfd_ptr == NULL)
{ {
bfd * debug_bfd; bfd *debug_bfd;
char * debug_filename = bfd_follow_gnu_debugaltlink (unit->abfd, DEBUGDIR); char *debug_filename = bfd_follow_gnu_debugaltlink (unit->abfd, DEBUGDIR);
if (debug_filename == NULL) if (debug_filename == NULL)
return NULL; return NULL;
if ((debug_bfd = bfd_openr (debug_filename, NULL)) == NULL debug_bfd = bfd_openr (debug_filename, NULL);
|| ! bfd_check_format (debug_bfd, bfd_object)) free (debug_filename);
{ if (debug_bfd == NULL)
if (debug_bfd) /* FIXME: Should we report our failure to follow the debuglink ? */
bfd_close (debug_bfd); return NULL;
/* FIXME: Should we report our failure to follow the debuglink ? */ if (!bfd_check_format (debug_bfd, bfd_object))
free (debug_filename); {
bfd_close (debug_bfd);
return NULL; return NULL;
} }
stash->alt_bfd_ptr = debug_bfd; stash->alt_bfd_ptr = debug_bfd;
@ -850,20 +851,21 @@ read_alt_indirect_ref (struct comp_unit * unit,
if (stash->alt_bfd_ptr == NULL) if (stash->alt_bfd_ptr == NULL)
{ {
bfd * debug_bfd; bfd *debug_bfd;
char * debug_filename = bfd_follow_gnu_debugaltlink (unit->abfd, DEBUGDIR); char *debug_filename = bfd_follow_gnu_debugaltlink (unit->abfd, DEBUGDIR);
if (debug_filename == NULL) if (debug_filename == NULL)
return FALSE; return FALSE;
if ((debug_bfd = bfd_openr (debug_filename, NULL)) == NULL debug_bfd = bfd_openr (debug_filename, NULL);
|| ! bfd_check_format (debug_bfd, bfd_object)) free (debug_filename);
{ if (debug_bfd == NULL)
if (debug_bfd) /* FIXME: Should we report our failure to follow the debuglink ? */
bfd_close (debug_bfd); return NULL;
/* FIXME: Should we report our failure to follow the debuglink ? */ if (!bfd_check_format (debug_bfd, bfd_object))
free (debug_filename); {
bfd_close (debug_bfd);
return NULL; return NULL;
} }
stash->alt_bfd_ptr = debug_bfd; stash->alt_bfd_ptr = debug_bfd;