1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-03-09 15:50:02 +00:00

Revert "Fix subshell leak for 4 special variables (re: bd3e2a80)"

This reverts commit b3d37b00b0.
While ksh's own regression test suite passed just fine, when
running the modernish[*] regression tests uite, ksh either froze
hard (needing SIGKILL) or threw a spurious syntax error.
Cause unknown, but I'm certainly reverting until I find out.

This reintroduces a subshell leak for four special variables.

[*] https://github.com/modernish/modernish
This commit is contained in:
Martijn Dekker 2020-09-05 16:48:17 +02:00
parent 5ed9ffd6c4
commit 417883dfdd
3 changed files with 12 additions and 19 deletions

View file

@ -233,6 +233,10 @@ int nv_subsaved(register Namval_t *np)
*
* add == 0: Move the node pointer from the parent shell to the current virtual subshell.
* add == 1: Create a copy of the node pointer in the current virtual subshell.
* add == 2: This will create a copy of the node pointer like 1, but it will disable the
* optimization for ${.sh.level}.
* add == 3: This is like 1, but it will never skip the following variables:
* ${.sh.level}, $_, ${.sh.subscript} and ${.sh.name}.
*/
Namval_t *sh_assignok(register Namval_t *np,int add)
{
@ -244,8 +248,11 @@ Namval_t *sh_assignok(register Namval_t *np,int add)
Namval_t *mpnext;
Namarr_t *ap;
unsigned int save;
/* don't save if told not to (see nv_restore()) or if we're in a ${ subshare; } */
if(!sp->shpwd || shp->subshare)
/* don't bother to save if in a ${ subshare; } */
if(sp->subshare)
return(np);
/* don't bother with this */
if(!sp->shpwd || (add != 3 && ((add != 2 && np==SH_LEVELNOD) || np==L_ARGNOD || np==SH_SUBSCRNOD || np==SH_NAMENOD)))
return(np);
if((ap=nv_arrayptr(np)) && (mp=nv_opensub(np)))
{