mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
Fix set +r
so that it cannot unset the restricted option
The ksh man page documents that the restricted option cannot be unset once it is set, which means `set +r` should be invalid. While this was true for `set +o restricted`, `set +r` was causing the restricted option to be unset. The fix for this problem comes from one of Solaris' patches, which adds an error check to prevent this behavior. Solaris' patch: https://github.com/oracle/solaris-userland/blob/master/components/ksh93/patches/020-CR6919590.patch src/cmd/ksh93/sh/args.c: - Add an error check to stop `set +r` from unsetting the restricted option. src/cmd/ksh93/tests/restricted.sh: - Add two regression tests to make sure the restricted option cannot be unset. (cherry picked from commit bef4fee404d8e24b38fce66420c14a39ac4a123e)
This commit is contained in:
parent
9cef2d534a
commit
74b4162178
2 changed files with 8 additions and 0 deletions
|
@ -302,6 +302,8 @@ int sh_argopts(int argc,register char *argv[], void *context)
|
|||
}
|
||||
else
|
||||
{
|
||||
if ((o == SH_RESTRICTED) && sh_isoption(SH_RESTRICTED))
|
||||
errormsg(SH_DICT,ERROR_exit(1),e_restricted,"r"); /* set -r cannot be unset */
|
||||
if(o==SH_XTRACE)
|
||||
trace = 0;
|
||||
off_option(&newflags,o);
|
||||
|
|
|
@ -87,4 +87,10 @@ for i in PATH ENV FPATH
|
|||
do check_restricted "function foo { typeset $i=foobar;};foo" || err_exit "$i can be changed in function by using typeset"
|
||||
done
|
||||
|
||||
# ======
|
||||
# `set +r` and `set +o restricted` should not unset the restricted option
|
||||
check_restricted 'set +r' 2> /dev/null || err_exit '`set +r` unsets the restricted option'
|
||||
check_restricted 'set +o restricted' 2> /dev/null || err_exit '`set +o restricted` unsets the restricted option'
|
||||
|
||||
# ======
|
||||
exit $((Errors<125?Errors:125))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue