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

POSIX compliance fix: apply 'set -u' to $1, $2, ...

POSIX requires[*] that expanding any unset parameter other than $@
and $* is an error when 'set -u'/'set -o nounset' is active.
However, on ksh93, $1, $2, ... were exempt as well. That is a bug.
[*] https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_25

src/cmd/ksh93/sh/macro.c:
- varsub(): Backport code for handling 'set -u' for positional
  parameters from the ast 2016-10-01-beta branch.

src/cmd/ksh93/tests/options.sh:
- Add relevant regression tests.

src/cmd/ksh93/sh.1:
- Document that $@ and $* are exempt from 'set -u'.

(cherry picked from commit f954c6be0748c4c38a680a75f27564965fbd328e)
This commit is contained in:
Martijn Dekker 2020-06-08 00:01:24 +02:00
parent e2a648b41f
commit 36da314c9e
5 changed files with 22 additions and 1 deletions

View file

@ -1195,6 +1195,14 @@ retry1:
}
else
v = 0;
/* Handle 'set -u'/'set -o nounset' for positional parameters */
if(!v && sh_isoption(SH_NOUNSET))
{
d=fcget();
fcseek(-1);
if(!(d && strchr(":+-?=",d)))
errormsg(SH_DICT,ERROR_exit(1),e_notset,ltos(c));
}
break;
case S_ALP:
if(c=='.' && type==0)