mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
Honour attribs for assignments preceding sp. builtins, POSIX functs
After the previous commit, one inconsistency was left. Assignments preceding special built-ins and POSIX functions (which persist past the command :-/) caused pre-existing attributes of the respective variables to be cleared. $ (f() { typeset -p n; }; typeset -i n; n=3+4 f) n=3+4 (expected output: 'typeset -i n=7') This problem was introduced shortly before the release of ksh 93u+, in version 2012-05-04, by adding these lines of code to the code for processing preceding assignments in sh_exec(): src/cmd/ksh93/sh/xec.c: 1055: if(np) 1056: flgs |= NV_UNJUST; So, for special and declaration commands and POSIX functions, the NV_UNJUST flag is passed to nv_open(). In older ksh versions, this flag cleared justify attributes only, but in early 2012 it was repurposed to clear *all* attributes -- without changing the name or the relevant comment in name.h, which are now both misleading. The reason for setting this flag in xec.c was to deal with some bugs in 'typeset'. Removing those two lines causes regressions: attributes.sh[316]: FAIL: typeset -L should not preserve old attributes attributes.sh[322]: FAIL: typeset -R should not preserve old attributes attributes.sh[483]: FAIL: typeset -F after typeset -L fails attributes.sh[488]: FAIL: integer attribute not cleared for subsequent typeset Those are all typeset regressions, which suggests this fix was relevant to typeset only. This is corroborated by the relevant AT&T ksh93/RELEASE entry: 12-04-27 A bug in which old attributes were not cleared when assigning a value using typeset has been fixed. So, to fix this 2012 regression without reintroducing the typeset regressions, we need to set the NV_UNJUST flag for invocations of the typeset family of commands only. This is changed in xec.c. While we're at it, we might as well rename that little-used flag to something that reflects its current purpose: NV_UNATTR.
This commit is contained in:
parent
75b247cce2
commit
1184b2ade9
6 changed files with 21 additions and 6 deletions
2
NEWS
2
NEWS
|
@ -9,7 +9,7 @@ Any uppercase BUG_* names are modernish shell bug IDs.
|
|||
a parent ksh through the environment to be corrupted.
|
||||
|
||||
- Fixed a bug where invocation-local assignments preceding a built-in or
|
||||
external command or ksh function call did not honour their pre-existing
|
||||
external command or function call did not honour their pre-existing
|
||||
attributes set by typeset (such as -i or -F) in certain cases.
|
||||
|
||||
2022-06-01:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue