memory leak in variable.c: fcn vareval(), free variable v created by cp_enqvar and used locally
This commit is contained in:
parent
58149203eb
commit
f911d38e36
|
|
@ -740,7 +740,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);
|
||||
|
|
@ -782,9 +782,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 '#':
|
||||
|
|
@ -793,7 +794,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);
|
||||
|
|
@ -806,6 +807,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':
|
||||
|
|
@ -830,7 +832,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);
|
||||
|
|
@ -843,6 +845,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