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

Fix typeset attributes -a, -A, -l, -u leaking out of subshells

If an array or upper/lowercase variable was declared with a null
initial value within a virtual/non-forked subshell, like:
	( typeset -a foo; ... )
	( typeset -A foo; ... )
	( typeset -l foo; ... )
	( typeset -u foo; ... )
then the type declaration leaked out of the subshell into the
parent shell environment, though without any values that may
subsequently have been assigned.

src/cmd/ksh93/bltins/typeset.c: setall():
- When deciding whether to create a virtual subshell scope for a
  variable, use sh_assignok(), which was actually designed for the
  purpose, instead of _nv_unset(). This allows getting rid of a
  tangled mess of special-casing that never worked quite right.

src/cmd/ksh93/tests/arrays.sh:
- Add regression tests checking that array declarations don't leak
  out of virtual subshells.

src/cmd/ksh93/tests/attributes.sh:
- Add regression tests for combining the 'export' and 'readonly'
  attributes with every other possible typeset attribute on unset
  variables. This also includes a subshell leak test for each one.

Fixes: https://github.com/ksh93/ksh/issues/88
This commit is contained in:
Martijn Dekker 2020-07-25 16:39:12 +01:00
parent 1bc2c74c74
commit a2f13c19f2
4 changed files with 99 additions and 5 deletions

3
NEWS
View file

@ -15,6 +15,9 @@ Any uppercase BUG_* names are modernish shell bug IDs.
an unrecognized option. 'sleep -: 1' will now show a usage message and
exit instead of sleep for one second.
- Fixed a bug that caused the 'typeset' variable attributes -a, -A, -l, and
-u to leak out of a subshell if they were set without assigning a value.
2020-07-23:
- Fixed an infinite loop that could occur when ksh is the system's /bin/sh.