components/ksh93/patches/CR7032068.patch
changeset 805 23c55a2f8a8e
child 6073 99c2bf34d78a
equal deleted inserted replaced
804:6652c7c4eb82 805:23c55a2f8a8e
       
     1 diff -rupN INIT.2011-02-08.clean/src/cmd/ksh93/sh/macro.c INIT.2011-02-08/src/cmd/ksh93/sh/macro.c
       
     2 --- INIT.2011-02-08.clean/src/cmd/ksh93/sh/macro.c	2012-05-02 03:34:48.830258020 -0700
       
     3 +++ INIT.2011-02-08/src/cmd/ksh93/sh/macro.c	2012-05-02 03:42:51.584924888 -0700
       
     4 @@ -1084,7 +1084,7 @@ static int varsub(Mac_t *mp)
       
     5  {
       
     6  	register int	c;
       
     7  	register int	type=0; /* M_xxx */
       
     8 -	register char	*v,*argp=0;
       
     9 +	register char	*v, *new_v = NULL, *argp=0;
       
    10  	register Namval_t	*np = NIL(Namval_t*);
       
    11  	register int 	dolg=0, mode=0;
       
    12  	Lex_t		*lp = (Lex_t*)mp->shp->lex_context;
       
    13 @@ -1436,6 +1436,7 @@ retry1:
       
    14  				if( (mp->arith||mp->let) && (np->nvfun || nv_isattr(np,(NV_LJUST|NV_RJUST|NV_ZFILL))) && !nv_isattr(np,NV_INTEGER) && (offset==0 || !isalnum(c)))
       
    15  					mp->zeros = 1;
       
    16  			}
       
    17 +			new_v = v = strdup(v);
       
    18  			if(savptr==stakptr(0))
       
    19  				stkseek(stkp,offset);
       
    20  			else
       
    21 @@ -1963,8 +1964,12 @@ retry2:
       
    22  	}
       
    23  	if(np)
       
    24  		nv_close(np);
       
    25 + 	if (new_v)
       
    26 +		free(new_v);
       
    27  	return(1);
       
    28  nosub:
       
    29 +	if (new_v)
       
    30 +		free(new_v);
       
    31  	if(type==M_BRACE && sh_lexstates[ST_NORM][c]==S_BREAK)
       
    32  	{
       
    33  		fcseek(-1);