From: Mark Wielaard Date: Sat, 6 Jun 2015 21:40:42 +0000 (+0200) Subject: libdwfl: Fix memory leak in find_debuginfo_in_path. X-Git-Tag: elfutils-0.162~6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=73b186aa6e9f3ddf2dd6963f55e678e8e954eb03;p=thirdparty%2Felfutils.git libdwfl: Fix memory leak in find_debuginfo_in_path. commit c4f133 libdwfl: find_debuginfo_in_patch don't alloca/strdupa strings of unknown size. Introduced a memory leak in the case nothing was found. Make sure before returning all temporary strings are all freed. Signed-off-by: Mark Wielaard --- diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 956ac9ffe..a5253e261 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2015-06-06 Mark Wielaard + + * find-debuginfo.c (find_debuginfo_in_path): Always free localpath, + localname and file_dirname. + 2015-06-06 Mark Wielaard * derelocate.c (cache_sections): Free sortrefs. diff --git a/libdwfl/find-debuginfo.c b/libdwfl/find-debuginfo.c index 9b911c1e7..c52335480 100644 --- a/libdwfl/find-debuginfo.c +++ b/libdwfl/find-debuginfo.c @@ -293,19 +293,13 @@ find_debuginfo_in_path (Dwfl_Module *mod, const char *file_name, } continue; default: - { - fail_free: - free (localpath); - free (localname); - free (file_dirname); - return -1; - } + goto fail_free; } - free (localpath); - free (localname); - free (file_dirname); if (validate (mod, fd, check, debuglink_crc)) { + free (localpath); + free (localname); + free (file_dirname); *debuginfo_file_name = fname; return fd; } @@ -315,6 +309,10 @@ find_debuginfo_in_path (Dwfl_Module *mod, const char *file_name, /* No dice. */ errno = 0; +fail_free: + free (localpath); + free (localname); + free (file_dirname); return -1; }