Avoid memory leak in chew
authorTom Tromey <tom@tromey.com>
Wed, 15 Feb 2023 23:09:35 +0000 (16:09 -0700)
committerAlan Modra <amodra@gmail.com>
Sun, 19 Feb 2023 02:47:41 +0000 (13:17 +1030)
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

index 19e3781bdda1fc9da19c0c3338b4640d3e4f03b1..cd399697abdca39d456ed43a18e698338a782dd5 100644 (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