Fix leak in event-top.c history expansion
E.g. in gdb.base/default.exp, valgrind detects leaks such as ==17663== 1,438 bytes in 101 blocks are definitely lost in loss record 2,804 of 2,884 ==17663== at 0x4C2BE6D: malloc (vg_replace_malloc.c:309) ==17663== by 0x418A17: xmalloc (common-utils.c:44) ==17663== by 0x4E6F19C: history_expand (histexpand.c:1061) ==17663== by 0x4B4490: handle_line_of_input(buffer*, char const*, int, char const*) (event-top.c:685) ==17663== by 0x4B4562: command_line_handler(std::unique_ptr<char, gdb::xfree_deleter<char> >&&) (event-top.c:753) ... Fix the leak by using an unique_xmalloc_ptr for history_value. gdb/ChangeLog 2019-01-22 Philippe Waroquiers <philippe.waroquiers@skynet.be> * event-top.c (handle_line_of_input): use unique_xmalloc_ptr for history_value.
This commit is contained in:
parent
be6d4f74c7
commit
b6fb1ee51c
|
@ -1,3 +1,8 @@
|
|||
2019-01-22 Philippe Waroquiers <philippe.waroquiers@skynet.be>
|
||||
|
||||
* event-top.c (handle_line_of_input): use unique_xmalloc_ptr for
|
||||
history_value.
|
||||
|
||||
2019-01-21 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* ui-out.c: Fix includes.
|
||||
|
|
|
@ -679,31 +679,29 @@ handle_line_of_input (struct buffer *cmd_line_buffer,
|
|||
/* Do history expansion if that is wished. */
|
||||
if (history_expansion_p && from_tty && input_interactive_p (current_ui))
|
||||
{
|
||||
char *history_value;
|
||||
char *cmd_expansion;
|
||||
int expanded;
|
||||
|
||||
expanded = history_expand (cmd, &history_value);
|
||||
expanded = history_expand (cmd, &cmd_expansion);
|
||||
gdb::unique_xmalloc_ptr<char> history_value (cmd_expansion);
|
||||
if (expanded)
|
||||
{
|
||||
size_t len;
|
||||
|
||||
/* Print the changes. */
|
||||
printf_unfiltered ("%s\n", history_value);
|
||||
printf_unfiltered ("%s\n", history_value.get ());
|
||||
|
||||
/* If there was an error, call this function again. */
|
||||
if (expanded < 0)
|
||||
{
|
||||
xfree (history_value);
|
||||
return cmd;
|
||||
}
|
||||
return cmd;
|
||||
|
||||
/* history_expand returns an allocated string. Just replace
|
||||
our buffer with it. */
|
||||
len = strlen (history_value);
|
||||
len = strlen (history_value.get ());
|
||||
xfree (buffer_finish (cmd_line_buffer));
|
||||
cmd_line_buffer->buffer = history_value;
|
||||
cmd_line_buffer->buffer = history_value.get ();
|
||||
cmd_line_buffer->buffer_size = len + 1;
|
||||
cmd = history_value;
|
||||
cmd = history_value.release ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue