sh: Fix memory leak when using a variable in arithmetic like $((x)).

MFC after:	3 weeks
This commit is contained in:
Jilles Tjoelker 2009-11-05 20:44:39 +00:00
parent f11ccc426a
commit 663c61a35b
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=198963

View File

@ -51,6 +51,13 @@ __FBSDID("$FreeBSD$");
int yylex(void);
struct varname
{
struct varname *next;
char name[1];
};
static struct varname *varnames;
#undef YY_INPUT
#define YY_INPUT(buf,result,max) \
result = (*buf = *arith_buf++) ? 1 : YY_NULL;
@ -80,11 +87,14 @@ int yylex(void);
* If variable doesn't exist, we should initialize
* it to zero.
*/
char *temp;
struct varname *temp;
if (lookupvar(yytext) == NULL)
setvarsafe(yytext, "0", 0);
temp = (char *)ckmalloc(strlen(yytext) + 1);
yylval.s_value = strcpy(temp, yytext);
temp = ckmalloc(sizeof(struct varname) +
strlen(yytext));
temp->next = varnames;
varnames = temp;
yylval.s_value = strcpy(temp->name, yytext);
return ARITH_VAR;
}
@ -130,5 +140,15 @@ int yylex(void);
void
arith_lex_reset(void)
{
struct varname *name, *next;
YY_NEW_FILE;
name = varnames;
while (name != NULL) {
next = name->next;
ckfree(name);
name = next;
}
varnames = NULL;
}