mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
Ksh currently restricts readonly scalar variables from having their
values directly changed via a value assignment. However, since ksh
allows variable attributes to be altered, the variable's value can
be indirectly altered. For instance, if TMOUT=900 (for a 15 minute
idle timeout) was set to readonly, all that is needed to alter the
value of TMOUT from 900 to 0 is to issue 'typeset -R1 TMOUT',
perhaps followed by a 'typeset -i TMOUT' to turn off the shell's
timeout value.
In addition, there are problems with arrays. The following is
incorrectly allowed:
typeset -a arr=((a b c) 1)
readonly arr
arr[0][1]=d
arr=(alphas=(a b c);name=x)
readonly arr.alphas
arr.alphas[1]=([b]=5)
arr=(alphas=(a b c);name=x)
readonly arr.alphas
arr.alphas[1]=(b)
typeset -C arr=(typeset -r -a alphas=(a b c);name=x)
arr.alphas[1]=()
src/cmd/ksh93/bltins/typeset.c: setall():
- Relocate readonly attribute check higher up the code and widen
its application to issue an error message if the pre-existing
name-pair has the readonly bit flag set.
- To avoid compatibility problems, don't check for readonly if
NV_RDONLY is the only attribute set (ignoring NV_NOFREE). This
allows 'readonly foo; readonly foo' to keep working.
src/cmd/ksh93/sh/array.c: nv_endsubscript():
- Apply a readonly flag check when an array subscript or append
assignment occurs, but allow type variables (typeset -T) as they
utilize '-r' for 'required' sub-variables.
src/cmd/ksh93/tests/readonly.sh:
- New file. Create readonly tests that validate the warning message
and validate that the readonly variable did not change.
src/cmd/ksh93/sh/streval.c:
- Bump MAXLEVEL from 9 to 1024 as a workaround for arithmetic
expansion, avoiding a spurious error about too much recursion
when the readonly.sh tests are run. This change is backported
from ksh 93v-.
TODO: debug a spurious increase in arithmetic recursion level
variable when readonly.sh tests with 'typeset -i' are run.
That is a different bug for a different commit.
Co-authored-by: Martijn Dekker <martijn@inlv.org>
|
||
|---|---|---|
| .. | ||
| _common | ||
| alias.sh | ||
| append.sh | ||
| arith.sh | ||
| arrays.sh | ||
| arrays2.sh | ||
| attributes.sh | ||
| basic.sh | ||
| bracket.sh | ||
| builtins.sh | ||
| case.sh | ||
| comvar.sh | ||
| comvario.sh | ||
| coprocess.sh | ||
| cubetype.sh | ||
| enum.sh | ||
| exit.sh | ||
| expand.sh | ||
| functions.sh | ||
| glob.sh | ||
| grep.sh | ||
| heredoc.sh | ||
| io.sh | ||
| jobs.sh | ||
| leaks.sh | ||
| locale.sh | ||
| math.sh | ||
| nameref.sh | ||
| namespace.sh | ||
| options.sh | ||
| path.sh | ||
| pointtype.sh | ||
| pty.sh | ||
| quoting.sh | ||
| quoting2.sh | ||
| readcsv.sh | ||
| readonly.sh | ||
| recttype.sh | ||
| restricted.sh | ||
| return.sh | ||
| select.sh | ||
| shtests | ||
| sigchld.sh | ||
| signal.sh | ||
| statics.sh | ||
| subshell.sh | ||
| substring.sh | ||
| tilde.sh | ||
| timetype.sh | ||
| treemove.sh | ||
| types.sh | ||
| variables.sh | ||
| vartree1.sh | ||
| vartree2.sh | ||