mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
The bugfix for BUG_CMDSPASGN backported in commit fae8862c
caused
two regressions with the += operator:
1. The += operator did not append to variables. Reproducer:
$ integer foo=3
$ foo+=2 command eval 'echo $foo'
2
2. The += operator ignored the readonly attribute, modifying readonly
variables in the same manner as above. Reproducer
$ readonly bar=str
$ bar+=ing command eval 'echo $bar'
ing
Both of the regressions above were caused by nv_putval() failing to
clone the variable from the previous scope into the invocation-local
scope. As a result, 'foo+=2' was effectively 0 + 2 (since ksh didn't
clone 3). The first regression was noticed during the development of
ksh93v-, so to fix both bugs I've backported the bugfix for the
regression from the ksh93v- 2013-10-10 alpha version:
https://www.mail-archive.com/ast-users@lists.research.att.com/msg00369.html
src/cmd/ksh93/sh/name.c:
- To fix both of the bugs above, find the variable to modify with
nv_search(), then clone it into the invocation local scope. To
fix the readonly bug as well, this is done before the NV_RDONLY
check (otherwise np will be missing that attribute and be
incorrectly modified in the invocation-local scope).
- Update a nearby comment describing what sh_assignok() does (per this
comment: https://github.com/ksh93/ksh/pull/249#issuecomment-811381759)
src/cmd/ksh93/tests/builtins.sh:
- Add regression tests for both of the now fixed regressions,
loosely based on the regression tests in ksh93v-.
This commit is contained in:
parent
6629c22308
commit
75796a9c75
4 changed files with 53 additions and 7 deletions
11
NEWS
11
NEWS
|
@ -3,6 +3,17 @@ For full details, see the git log at: https://github.com/ksh93/ksh
|
|||
|
||||
Any uppercase BUG_* names are modernish shell bug IDs.
|
||||
|
||||
2021-04-11:
|
||||
|
||||
- Fixed two related regressions introduced on 2020-06-16:
|
||||
1. The += assignment failed to append the value of variables when used
|
||||
in an invocation-local scope. The following should print '5', but
|
||||
the regression resulted in '3' being printed instead:
|
||||
$ integer foo=2; foo+=3 command eval 'echo $foo'
|
||||
3
|
||||
2. Any += assignment used in an invocation-local scope could modify
|
||||
readonly variables.
|
||||
|
||||
2021-04-10:
|
||||
|
||||
- Fixed: the internal count of the recursion level for arithmetic expressions
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue