PR22191, memory leak in dwarf2.c
authorAlan Modra <amodra@gmail.com>
Sun, 24 Sep 2017 07:40:14 +0000 (17:10 +0930)
committerAlan Modra <amodra@gmail.com>
Sun, 24 Sep 2017 11:31:30 +0000 (21:01 +0930)
table->sequences is a linked list before it is replaced by a bfd_alloc
array in sort_line_sequences.

PR 22191
* dwarf2.c (decode_line_info): Properly free line sequences on error.

bfd/ChangeLog
bfd/dwarf2.c

index 450217a..c465462 100644 (file)
@@ -1,5 +1,10 @@
 2017-09-24  Alan Modra  <amodra@gmail.com>
 
+       PR 22191
+       * dwarf2.c (decode_line_info): Properly free line sequences on error.
+
+2017-09-24  Alan Modra  <amodra@gmail.com>
+
        PR 22187
        * dwarf2.c (find_abstract_instance_name): Add orig_info_ptr and
        pname param.  Return status.  Make name const.  Don't abort,
index ec4c311..1566cd8 100644 (file)
@@ -2476,8 +2476,12 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
     return table;
 
  fail:
-  if (table->sequences != NULL)
-    free (table->sequences);
+  while (table->sequences != NULL)
+    {
+      struct line_sequence* seq = table->sequences;
+      table->sequences = table->sequences->prev_sequence;
+      free (seq);
+    }
   if (table->files != NULL)
     free (table->files);
   if (table->dirs != NULL)