0
0
mirror of https://github.com/vim/vim.git synced 2025-09-26 04:04:07 -04:00

patch 8.2.2693: Vim9: locked script variable can be changed

Problem:    Vim9: locked script variable can be changed.
Solution:   Check legacy script variable for being locked. (issue #8031)
This commit is contained in:
Bram Moolenaar
2021-04-02 14:44:02 +02:00
parent f5906aa780
commit dcf29ac87f
3 changed files with 17 additions and 2 deletions

View File

@@ -1355,7 +1355,17 @@ def Test_var_declaration_fails()
enddef enddef
SetLocked() SetLocked()
END 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 lines =<< trim END
vim9script vim9script
@@ -1365,7 +1375,7 @@ def Test_var_declaration_fails()
SetGlobalConst() SetGlobalConst()
g:globConst = 234 g:globConst = 234
END END
CheckScriptFailure(lines, 'E741: Value is locked: globConst') CheckScriptFailure(lines, 'E741: Value is locked: globConst', 1)
unlet g:globConst unlet g:globConst
lines =<< trim END lines =<< trim END

View File

@@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
2693,
/**/ /**/
2692, 2692,
/**/ /**/

View File

@@ -1942,6 +1942,9 @@ call_def_function(
store_var(name, STACK_TV_BOT(0)); store_var(name, STACK_TV_BOT(0));
else else
{ {
SOURCING_LNUM = iptr->isn_lnum;
if (var_check_permission(di, name) == FAIL)
goto on_error;
clear_tv(&di->di_tv); clear_tv(&di->di_tv);
di->di_tv = *STACK_TV_BOT(0); di->di_tv = *STACK_TV_BOT(0);
} }