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.
This commit is contained in:
Tom Tromey 2023-02-15 16:09:35 -07:00 committed by Alan Modra
parent cd414f90c3
commit 85fc580128

View File

@ -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