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 *
|
wordlist *
|
||||||
vareval(char *string)
|
vareval(char *string)
|
||||||
{
|
{
|
||||||
struct variable *v;
|
struct variable *v, *vfree = NULL;
|
||||||
wordlist *wl;
|
wordlist *wl;
|
||||||
char buf[BSIZE_SP], *s;
|
char buf[BSIZE_SP], *s;
|
||||||
char *oldstring = copy(string);
|
char *oldstring = copy(string);
|
||||||
|
|
@ -782,9 +782,10 @@ vareval(char *string)
|
||||||
if (eq(v->va_name, string))
|
if (eq(v->va_name, string))
|
||||||
break;
|
break;
|
||||||
if (!v)
|
if (!v)
|
||||||
v = cp_enqvar(string);
|
vfree = v = cp_enqvar(string);
|
||||||
wl = wl_cons(copy(v ? "1" : "0"), NULL);
|
wl = wl_cons(copy(v ? "1" : "0"), NULL);
|
||||||
tfree(oldstring);
|
tfree(oldstring);
|
||||||
|
free_struct_variable(vfree);
|
||||||
return (wl);
|
return (wl);
|
||||||
|
|
||||||
case '#':
|
case '#':
|
||||||
|
|
@ -793,7 +794,7 @@ vareval(char *string)
|
||||||
if (eq(v->va_name, string))
|
if (eq(v->va_name, string))
|
||||||
break;
|
break;
|
||||||
if (!v)
|
if (!v)
|
||||||
v = cp_enqvar(string);
|
vfree = v = cp_enqvar(string);
|
||||||
if (!v) {
|
if (!v) {
|
||||||
fprintf(cp_err, "Error: %s: no such variable.\n", string);
|
fprintf(cp_err, "Error: %s: no such variable.\n", string);
|
||||||
tfree(oldstring);
|
tfree(oldstring);
|
||||||
|
|
@ -806,6 +807,7 @@ vareval(char *string)
|
||||||
i = (v->va_type != CP_BOOL);
|
i = (v->va_type != CP_BOOL);
|
||||||
wl = wl_cons(tprintf("%d", i), NULL);
|
wl = wl_cons(tprintf("%d", i), NULL);
|
||||||
tfree(oldstring);
|
tfree(oldstring);
|
||||||
|
free_struct_variable(vfree);
|
||||||
return (wl);
|
return (wl);
|
||||||
|
|
||||||
case '\0':
|
case '\0':
|
||||||
|
|
@ -830,7 +832,7 @@ vareval(char *string)
|
||||||
if (!v) {
|
if (!v) {
|
||||||
range = NULL;
|
range = NULL;
|
||||||
string = oldstring;
|
string = oldstring;
|
||||||
v = cp_enqvar(string);
|
vfree = v = cp_enqvar(string);
|
||||||
}
|
}
|
||||||
if (!v && (s = getenv(string)) != NULL) {
|
if (!v && (s = getenv(string)) != NULL) {
|
||||||
wl = wl_cons(copy(s), NULL);
|
wl = wl_cons(copy(s), NULL);
|
||||||
|
|
@ -843,6 +845,7 @@ vareval(char *string)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
wl = cp_varwl(v);
|
wl = cp_varwl(v);
|
||||||
|
free_struct_variable(vfree);
|
||||||
|
|
||||||
/* Now parse and deal with 'range' ... */
|
/* Now parse and deal with 'range' ... */
|
||||||
if (range) {
|
if (range) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue