summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-04-02 14:44:02 +0200
committerBram Moolenaar <Bram@vim.org>2021-04-02 14:44:02 +0200
commitdcf29ac87f4d7a62c503ba6de0d92c7779446bf2 (patch)
tree2b7eadedf9d1a7ba190577ef019fd471e963d716
parentf5906aa7807e9a14159cbc09a141138a2a068ab2 (diff)
downloadvim-git-dcf29ac87f4d7a62c503ba6de0d92c7779446bf2.tar.gz
patch 8.2.2693: Vim9: locked script variable can be changedv8.2.2693
Problem: Vim9: locked script variable can be changed. Solution: Check legacy script variable for being locked. (issue #8031)
-rw-r--r--src/testdir/test_vim9_assign.vim14
-rw-r--r--src/version.c2
-rw-r--r--src/vim9execute.c3
3 files changed, 17 insertions, 2 deletions
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index c06205225..867afaf71 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -1355,7 +1355,17 @@ def Test_var_declaration_fails()
enddef
SetLocked()
END
- CheckScriptFailure(lines, 'E741: Value is locked: name')
+ CheckScriptFailure(lines, 'E741: Value is locked: name', 1)
+
+ lines =<< trim END
+ let s:legacy = 'one'
+ lockvar s:legacy
+ def SetLocked()
+ s:legacy = 'two'
+ enddef
+ call SetLocked()
+ END
+ CheckScriptFailure(lines, 'E741: Value is locked: s:legacy', 1)
lines =<< trim END
vim9script
@@ -1365,7 +1375,7 @@ def Test_var_declaration_fails()
SetGlobalConst()
g:globConst = 234
END
- CheckScriptFailure(lines, 'E741: Value is locked: globConst')
+ CheckScriptFailure(lines, 'E741: Value is locked: globConst', 1)
unlet g:globConst
lines =<< trim END
diff --git a/src/version.c b/src/version.c
index 105958500..760a0f48e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2693,
+/**/
2692,
/**/
2691,
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 69254bebe..81041bbea 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -1942,6 +1942,9 @@ call_def_function(
store_var(name, STACK_TV_BOT(0));
else
{
+ SOURCING_LNUM = iptr->isn_lnum;
+ if (var_check_permission(di, name) == FAIL)
+ goto on_error;
clear_tv(&di->di_tv);
di->di_tv = *STACK_TV_BOT(0);
}