forked from Imagelibrary/binutils-gdb
Fix leak in print_one_catch_syscall.
The last text produced was not freed, causing the below leak (e.g. in gdb.base/catch-syscall.exp): ==24970== 56 bytes in 12 blocks are definitely lost in loss record 626 of 3,289 ==24970== at 0x4C2BE6D: malloc (vg_replace_malloc.c:309) ==24970== by 0x66B9C3F: __vasprintf_chk (vasprintf_chk.c:80) ==24970== by 0x405181: vasprintf (stdio2.h:210) ==24970== by 0x405181: xstrvprintf(char const*, __va_list_tag*) (common-utils.c:122) ==24970== by 0x40524B: xstrprintf(char const*, ...) (common-utils.c:113) ==24970== by 0x3B49DB: print_one_catch_syscall(breakpoint*, bp_location**) (break-catch-syscall.c:275) ==24970== by 0x3C698F: print_one_breakpoint_location(breakpoint*, bp_location*, int, bp_location**, int) (breakpoint.c:6076) ==24970== by 0x3C75B1: print_one_breakpoint(breakpoint*, bp_location**, int) (breakpoint.c:6373) ==24970== by 0x3C7D0E: breakpoint_1(char const*, int, int (*)(breakpoint const*)) (breakpoint.c:6571) ==24970== by 0x3C822C: info_breakpoints_command(char const*, int) (breakpoint.c:6625) 2019-01-01 Philippe Waroquiers <philippe.waroquiers@skynet.be> * break-catch-syscall.c (print_one_catch_syscall): xfree the last text.
This commit is contained in:
@@ -1,3 +1,8 @@
|
||||
2019-01-01 Philippe Waroquiers <philippe.waroquiers@skynet.be>
|
||||
|
||||
* break-catch-syscall.c (print_one_catch_syscall): xfree
|
||||
the last text.
|
||||
|
||||
2019-01-01 Joel Brobecker <brobecker@adacore.com>
|
||||
|
||||
* top.c (print_gdb_version): Update Copyright year in version
|
||||
|
||||
@@ -265,7 +265,7 @@ print_one_catch_syscall (struct breakpoint *b,
|
||||
|
||||
for (int iter : c->syscalls_to_be_caught)
|
||||
{
|
||||
char *x = text;
|
||||
char *previous_text = text;
|
||||
struct syscall s;
|
||||
get_syscall_by_number (gdbarch, iter, &s);
|
||||
|
||||
@@ -274,14 +274,15 @@ print_one_catch_syscall (struct breakpoint *b,
|
||||
else
|
||||
text = xstrprintf ("%s%d, ", text, iter);
|
||||
|
||||
/* We have to xfree the last 'text' (now stored at 'x')
|
||||
because xstrprintf dynamically allocates new space for it
|
||||
on every call. */
|
||||
xfree (x);
|
||||
/* We have to xfree previous_text because xstrprintf dynamically
|
||||
allocates new space for text on every call. */
|
||||
xfree (previous_text);
|
||||
}
|
||||
/* Remove the last comma. */
|
||||
text[strlen (text) - 2] = '\0';
|
||||
uiout->field_string ("what", text);
|
||||
/* xfree last text. */
|
||||
xfree (text);
|
||||
}
|
||||
else
|
||||
uiout->field_string ("what", "<any syscall>");
|
||||
|
||||
Reference in New Issue
Block a user