From 9c1fcd01cf4f222b7065af353cedc3f9701c739c Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 17 Mar 2014 19:02:13 +0000 Subject: [PATCH] fix latent bugs in ui-out.c The destructor code in ui-out.c has a latent bug, which is hidden by the fact that nothing uses this right now. This patch fixes the problem. The bug is that we don't always clear a pointer in the ui-out object, leading to a bad free. 2014-03-17 Tom Tromey * ui-out.c (clear_table, ui_out_new): Clear uiout->table.id. --- gdb/ChangeLog | 4 ++++ gdb/ui-out.c | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4e62f0c757d..8b54b59d712 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2014-03-17 Tom Tromey + + * ui-out.c (clear_table, ui_out_new): Clear uiout->table.id. + 2014-03-17 Pierre-Marie de Rodat * ada-lang.c (decode_constrained_packed_array): Perform a diff --git a/gdb/ui-out.c b/gdb/ui-out.c index 2edb1405002..63cbc6e6858 100644 --- a/gdb/ui-out.c +++ b/gdb/ui-out.c @@ -807,8 +807,8 @@ uo_table_header (struct ui_out *uiout, int width, enum ui_align align, static void clear_table (struct ui_out *uiout) { - if (uiout->table.id) - xfree (uiout->table.id); + xfree (uiout->table.id); + uiout->table.id = NULL; clear_header_list (uiout); } @@ -1114,6 +1114,7 @@ ui_out_new (const struct ui_out_impl *impl, void *data, current->field_count = 0; VEC_safe_push (ui_out_level_p, uiout->levels, current); + uiout->table.id = NULL; uiout->table.header_first = NULL; uiout->table.header_last = NULL; uiout->table.header_next = NULL; -- 2.30.2