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

Fix assignments preceding 'command <special builtin>' (#19)

Ksh was not checking for `command` when running a special builtin,
which caused preceding invocation-local variable assignments to
become global. This is the reproducer from the att/ast#72:

$ foo=BUG command eval ':'
$ echo "$foo"

This no longer prints 'BUG', as ksh now makes sure the command builtin
is not running a special builtin before making invocation-local
variable assignments global.

src/cmd/ksh93/sh/xec.c:
 - Backport the bugfix for BUG_CMDSPASGN from ksh93v- 2013-10-10-alpha.

src/cmd/ksh93/tests/builtins.sh:
 - Add a regression test based on the reproducer in att/ast#72.
This commit is contained in:
Johnothan King 2020-06-16 14:58:05 -07:00 committed by GitHub
parent c258a04f7a
commit fae8862c53
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 10 additions and 8 deletions

View file

@ -1134,7 +1134,7 @@ int sh_exec(register const Shnode_t *t, int flags)
io = t->tre.treio;
if(shp->envlist = argp = t->com.comset)
{
if(argn==0 || (np && nv_isattr(np,(BLT_DCL|BLT_SPC))))
if(argn==0 || (np && (nv_isattr(np,BLT_DCL) || (!command && nv_isattr(np,BLT_SPC)))))
{
Namval_t *tp=0;
if(argn)