From 85fc5801281d38897b652b298d35074b7b73ed3a Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 15 Feb 2023 16:09:35 -0700 Subject: [PATCH] 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. --- bfd/doc/chew.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) 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 -- 2.30.2