Browse Source

define.c, plug a memleak in com_undefine()

rlar 14 years ago
parent
commit
198604f605
  1. 17
      src/frontend/define.c

17
src/frontend/define.c

@ -441,22 +441,35 @@ com_undefine(wordlist *wlist)
return; return;
if (*wlist->wl_word == '*') { if (*wlist->wl_word == '*') {
udfuncs = NULL; /* Be sloppy. */
for (udf = udfuncs; udf;) {
struct udfunc *next = udf->ud_next;
cp_remkword(CT_UDFUNCS, udf->ud_name);
free_pnode(udf->ud_text);
free(udf->ud_name);
free(udf);
udf = next;
}
udfuncs = NULL;
return; return;
} }
for (; wlist; wlist = wlist->wl_next) { for (; wlist; wlist = wlist->wl_next) {
ludf = NULL; ludf = NULL;
for (udf = udfuncs; udf; udf = udf->ud_next) {
for (udf = udfuncs; udf;) {
struct udfunc *next = udf->ud_next;
if (eq(wlist->wl_word, udf->ud_name)) { if (eq(wlist->wl_word, udf->ud_name)) {
if (ludf) if (ludf)
ludf->ud_next = udf->ud_next; ludf->ud_next = udf->ud_next;
else else
udfuncs = udf->ud_next; udfuncs = udf->ud_next;
cp_remkword(CT_UDFUNCS, wlist->wl_word); cp_remkword(CT_UDFUNCS, wlist->wl_word);
free_pnode(udf->ud_text);
free(udf->ud_name);
free(udf);
} else { } else {
ludf = udf; ludf = udf;
} }
udf = next;
} }
} }
} }

Loading…
Cancel
Save