From: Tom Tromey Date: Wed, 15 Feb 2023 23:09:35 +0000 (-0700) Subject: Avoid memory leak in chew X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=85fc5801281d38897b652b298d35074b7b73ed3a;p=binutils-gdb.git Avoid memory leak in chew An earlier patch of mine introduced a memory leak in chew. The bug was that the new "variable" word didn't free the following word. This patch fixes it by arranging to transfer ownership of the name to the variable itself. * doc/chew.c (add_variable): New function, from add_intrinsic_variable. (add_intrinsic_variable): Call add_variable. (compile): Call add_variable. --- diff --git a/bfd/doc/chew.c b/bfd/doc/chew.c index 19e3781bdda..cd399697abd 100644 --- a/bfd/doc/chew.c +++ b/bfd/doc/chew.c @@ -1241,9 +1241,9 @@ add_intrinsic (char *name, void (*func) (void)) } static void -add_intrinsic_variable (char *name, intptr_t *loc) +add_variable (char *name, intptr_t *loc) { - dict_type *new_d = newentry (xstrdup (name)); + dict_type *new_d = newentry (name); pcu p = { push_variable }; add_to_definition (new_d, p); p.l = (intptr_t) loc; @@ -1252,6 +1252,12 @@ add_intrinsic_variable (char *name, intptr_t *loc) add_to_definition (new_d, p); } +static void +add_intrinsic_variable (const char *name, intptr_t *loc) +{ + add_variable (xstrdup (name), loc); +} + void compile (char *string) { @@ -1333,7 +1339,7 @@ compile (char *string) continue; intptr_t *loc = xmalloc (sizeof (intptr_t)); *loc = 0; - add_intrinsic_variable (word, loc); + add_variable (word, loc); string = nextword (string, &word); } else