# HG changeset patch # User Bram Moolenaar # Date 1586456104 -7200 # Node ID 12fa79cac39baeee378d9dc506696f819ed5636e # Parent 2a644fc09f28f81b70ea089c00f8665a00fdf7c7 patch 8.2.0537: Vim9: no check for sandbox when setting v:var Commit: https://github.com/vim/vim/commit/cab2767874dca019083aa371a1f3b45385dbd037 Author: Bram Moolenaar Date: Thu Apr 9 20:10:55 2020 +0200 patch 8.2.0537: Vim9: no check for sandbox when setting v:var Problem: Vim9: no check for sandbox when setting v:var. Solution: Check for sandbox. diff --git a/src/evalvars.c b/src/evalvars.c --- a/src/evalvars.c +++ b/src/evalvars.c @@ -1978,6 +1978,17 @@ set_vim_var_tv(int idx, typval_T *tv) clear_tv(tv); return FAIL; } + // VV_RO is also checked when compiling, but let's check here as well. + if (vimvars[idx].vv_flags & VV_RO) + { + semsg(_(e_readonlyvar), vimvars[idx].vv_name); + return FAIL; + } + if (sandbox && (vimvars[idx].vv_flags & VV_RO_SBX)) + { + semsg(_(e_readonlysbx), vimvars[idx].vv_name); + return FAIL; + } clear_tv(&vimvars[idx].vv_di.di_tv); vimvars[idx].vv_di.di_tv = *tv; return OK; diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -170,6 +170,11 @@ def Test_assignment_default() assert_equal(5678, nr) enddef +def Mess(): string + v:foldstart = 123 + return 'xxx' +enddef + func Test_assignment_failure() call CheckDefFailure(['let var=234'], 'E1004:') call CheckDefFailure(['let var =234'], 'E1004:') @@ -207,6 +212,9 @@ func Test_assignment_failure() call CheckDefFailure(['let var: dict '], 'E1068:') call CheckDefFailure(['let var: dict