Skip site navigation (1)Skip section navigation (2)
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>