[libbacktrace] Fix memory leak in build_address_map
authorTom de Vries <tdevries@suse.de>
Fri, 28 Dec 2018 03:43:15 +0000 (03:43 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Fri, 28 Dec 2018 03:43:15 +0000 (03:43 +0000)
While upon failure in build_address_map we call free_unit_addrs_vector, this
does not actually free the addrs vector, but merely the abbrevs of the units
pointed at by the elements of the addrs vector.

Fix this by adding code to build_address_map to make sure that the addrs vector
is freed upon failure.

Bootstrapped and reg-tested on x86_64.

2018-12-28  Tom de Vries  <tdevries@suse.de>

* dwarf.c (build_address_map): Free addrs vector upon failure.

From-SVN: r267442

libbacktrace/ChangeLog
libbacktrace/dwarf.c

index d3d964b24b2dcdbd6ad98ca76fd95c743c42f284..60e5f03d0f2b30559eadb2aa07ccf3b14ff8e09e 100644 (file)
@@ -1,3 +1,7 @@
+2018-12-28  Tom de Vries  <tdevries@suse.de>
+
+       * dwarf.c (build_address_map): Free addrs vector upon failure.
+
 2018-12-14  Tom de Vries  <tdevries@suse.de>
 
        PR testsuite/88491
index 48ef3638a5f53f3aaeffe349654daf21e05e4405..37a08ca29a8bb4b847d4f1602d921fb2f7898c6b 100644 (file)
@@ -1552,6 +1552,11 @@ build_address_map (struct backtrace_state *state, uintptr_t base_address,
  fail:
   free_abbrevs (state, &abbrevs, error_callback, data);
   free_unit_addrs_vector (state, addrs, error_callback, data);
+  if (addrs->count > 0)
+    {
+      backtrace_vector_free (state, &addrs->vec, error_callback, data);
+      addrs->count = 0;
+    }
   return 0;
 }