Date: Sun, 6 Dec 2009 23:46:40 +0100 From: Oliver Pinter <oliver.pntr@gmail.com> To: Jilles Tjoelker <jilles@freebsd.org> Cc: svn-src-stable@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, svn-src-stable-8@freebsd.org Subject: Re: svn commit: r200188 - stable/8/bin/sh Message-ID: <6101e8c40912061446s79423b50le51dd7861fdcc333@mail.gmail.com> In-Reply-To: <200912062201.nB6M1jsP032883@svn.freebsd.org> References: <200912062201.nB6M1jsP032883@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
this for 7-STABLE? On 12/6/09, Jilles Tjoelker <jilles@freebsd.org> wrote: > Author: jilles > Date: Sun Dec 6 22:01:45 2009 > New Revision: 200188 > URL: http://svn.freebsd.org/changeset/base/200188 > > Log: > MFC r198963: sh: Fix memory leak when using a variable in arithmetic > like $((x)). > > Modified: > stable/8/bin/sh/arith_lex.l > Directory Properties: > stable/8/bin/sh/ (props changed) > > Modified: stable/8/bin/sh/arith_lex.l > ============================================================================== > --- stable/8/bin/sh/arith_lex.l Sun Dec 6 21:42:25 2009 (r200187) > +++ stable/8/bin/sh/arith_lex.l Sun Dec 6 22:01:45 2009 (r200188) > @@ -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; > } > _______________________________________________ > svn-src-stable@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/svn-src-stable > To unsubscribe, send any mail to "svn-src-stable-unsubscribe@freebsd.org" >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6101e8c40912061446s79423b50le51dd7861fdcc333>