memory leak in variable.c: fcn vareval(), free variable v created by cp_enqvar and used locally
This commit is contained in:
parent
4d64117e79
commit
13b6a5fd40
|
|
@ -713,7 +713,7 @@ cp_variablesubst(wordlist *wlist)
|
|||
wordlist *
|
||||
vareval(char *string)
|
||||
{
|
||||
struct variable *v;
|
||||
struct variable *v, *vfree = NULL;
|
||||
wordlist *wl;
|
||||
char buf[BSIZE_SP], *s;
|
||||
char *oldstring = copy(string);
|
||||
|
|
@ -755,9 +755,10 @@ vareval(char *string)
|
|||
if (eq(v->va_name, string))
|
||||
break;
|
||||
if (!v)
|
||||
v = cp_enqvar(string);
|
||||
vfree = v = cp_enqvar(string);
|
||||
wl = wl_cons(copy(v ? "1" : "0"), NULL);
|
||||
tfree(oldstring);
|
||||
free_struct_variable(vfree);
|
||||
return (wl);
|
||||
|
||||
case '#':
|
||||
|
|
@ -766,7 +767,7 @@ vareval(char *string)
|
|||
if (eq(v->va_name, string))
|
||||
break;
|
||||
if (!v)
|
||||
v = cp_enqvar(string);
|
||||
vfree = v = cp_enqvar(string);
|
||||
if (!v) {
|
||||
fprintf(cp_err, "Error: %s: no such variable.\n", string);
|
||||
tfree(oldstring);
|
||||
|
|
@ -779,6 +780,7 @@ vareval(char *string)
|
|||
i = (v->va_type != CP_BOOL);
|
||||
wl = wl_cons(tprintf("%d", i), NULL);
|
||||
tfree(oldstring);
|
||||
free_struct_variable(vfree);
|
||||
return (wl);
|
||||
|
||||
case '\0':
|
||||
|
|
@ -803,7 +805,7 @@ vareval(char *string)
|
|||
if (!v) {
|
||||
range = NULL;
|
||||
string = oldstring;
|
||||
v = cp_enqvar(string);
|
||||
vfree = v = cp_enqvar(string);
|
||||
}
|
||||
if (!v && (s = getenv(string)) != NULL) {
|
||||
wl = wl_cons(copy(s), NULL);
|
||||
|
|
@ -816,6 +818,7 @@ vareval(char *string)
|
|||
return (NULL);
|
||||
}
|
||||
wl = cp_varwl(v);
|
||||
free_struct_variable(vfree);
|
||||
|
||||
/* Now parse and deal with 'range' ... */
|
||||
if (range) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue