mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
Fix subshell leak for 4 special variables (re: bd3e2a80)
The following special variables leaked out of a subshell:
$_, ${.sh.name}, ${.sh.level}, ${.sh.subscript}.
This was due to a faulty optimisation in sh_assignok().
bd3e2a80 fixed that in part, this fixes the rest.
src/cmd/ksh93/sh/subshell.c:
- Simplify sh_assignok() by removing special-casing for these four
special variables. The 'add' param reverts to a simple boolean.
- The test for a ${ subshare; } was actually wrong. sp->subshare is
a saved backup value. We must test shp->subshare. (re: a9de50bf)
src/cmd/ksh93/bltins/typeset.c:
- setall(), unall(): Update sh_assignok() calls.
src/cmd/ksh93/tests/variables.sh:
- Regress-test subshell leaks for all special variables.
Closes: #122
This commit is contained in:
parent
00d439605f
commit
b3d37b00b0
3 changed files with 19 additions and 12 deletions
|
|
@ -688,7 +688,7 @@ static int setall(char **argv,register int flag,Dt_t *troot,struct tdata *tp
|
|||
* Variables with internal trap/discipline functions (LC_*, LINENO, etc.) need to be
|
||||
* cloned, as moving them will remove the discipline function.
|
||||
*/
|
||||
np=sh_assignok(np,2);
|
||||
np=sh_assignok(np,1);
|
||||
}
|
||||
else
|
||||
np=sh_assignok(np,0);
|
||||
|
|
@ -800,7 +800,7 @@ static int setall(char **argv,register int flag,Dt_t *troot,struct tdata *tp
|
|||
if (tp->aflag && (tp->argnum>0 || (curflag!=newflag)))
|
||||
{
|
||||
if(shp->subshell)
|
||||
sh_assignok(np,3);
|
||||
sh_assignok(np,1);
|
||||
if(troot!=shp->var_tree)
|
||||
nv_setattr(np,newflag&~NV_ASSIGN);
|
||||
else
|
||||
|
|
@ -1285,7 +1285,7 @@ static int unall(int argc, char **argv, register Dt_t *troot, Shell_t* shp)
|
|||
* Variables with internal trap/discipline functions (LC_*, LINENO, etc.) need to be
|
||||
* cloned, as moving them will remove the discipline function.
|
||||
*/
|
||||
np=sh_assignok(np,2);
|
||||
np=sh_assignok(np,1);
|
||||
}
|
||||
else
|
||||
np=sh_assignok(np,0);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue