diff options
-rw-r--r-- | runtime/doc/starting.txt | 8 | ||||
-rw-r--r-- | src/evalfunc.c | 6 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 12 insertions, 4 deletions
diff --git a/runtime/doc/starting.txt b/runtime/doc/starting.txt index f7e98c7bef..1e7daa6b51 100644 --- a/runtime/doc/starting.txt +++ b/runtime/doc/starting.txt @@ -1,4 +1,4 @@ -*starting.txt* For Vim version 9.0. Last change: 2023 Oct 17 +*starting.txt* For Vim version 9.0. Last change: 2023 Oct 20 VIM REFERENCE MANUAL by Bram Moolenaar @@ -249,10 +249,10 @@ a slash. Thus "-R" means recovery and "-/R" readonly. *-Z* *restricted-mode* *E145* *E981* -Z Restricted mode. All commands that make use of an external shell are disabled. This includes suspending with CTRL-Z, - ":sh", filtering, the system() function, backtick expansion + ":sh", filtering, the |system()| function, backtick expansion and libcall(). - Also disallowed are delete(), rename(), mkdir(), job_start(), - etc. + Also disallowed are |delete()|, |rename()|, |mkdir()|, + |job_start()|, |setenv()| etc. Interfaces, such as Python, Ruby and Lua, are also disabled, since they could be used to execute shell commands. Perl uses the Safe module. diff --git a/src/evalfunc.c b/src/evalfunc.c index f9b81c6054..9e4e26ba0c 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -9723,6 +9723,12 @@ f_setenv(typval_T *argvars, typval_T *rettv UNUSED) if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL) return; + // seting an environment variable may be dangerous, e.g. you could + // setenv GCONV_PATH=/tmp and then have iconv() unexpectedly call + // a shell command using some shared library: + if (check_restricted() || check_secure()) + return; + name = tv_get_string_buf(&argvars[0], namebuf); if (argvars[1].v_type == VAR_SPECIAL && argvars[1].vval.v_number == VVAL_NULL) diff --git a/src/version.c b/src/version.c index 890e92c7cb..2bcdfc9736 100644 --- a/src/version.c +++ b/src/version.c @@ -705,6 +705,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2070, +/**/ 2069, /**/ 2068, |