From 6e50ec2f0af85940e40ed3f897bfcfa445adbb0e Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 3 Apr 2021 19:32:44 +0200 Subject: [PATCH] patch 8.2.2703: Vim9: memory leak when failing on locked variable Problem: Vim9: memory leak when failing on locked variable. Solution: Free the memory. --- src/testdir/test_vim9_assign.vim | 3 ++- src/version.c | 2 ++ src/vim9execute.c | 6 ++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim index 867afaf71..0b1d5fcb1 100644 --- a/src/testdir/test_vim9_assign.vim +++ b/src/testdir/test_vim9_assign.vim @@ -1323,6 +1323,7 @@ def Test_var_declaration() unlet g:var_test unlet g:var_prefixed unlet g:other_var + unlet g:globConst unlet g:FOO unlet g:FOOS unlet g:FLIST @@ -1375,7 +1376,7 @@ def Test_var_declaration_fails() SetGlobalConst() g:globConst = 234 END - CheckScriptFailure(lines, 'E741: Value is locked: globConst', 1) + CheckScriptFailure(lines, 'E741: Value is locked: g:globConst', 6) unlet g:globConst lines =<< trim END diff --git a/src/version.c b/src/version.c index 5a5f73fb9..812b1e587 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2703, /**/ 2702, /**/ diff --git a/src/vim9execute.c b/src/vim9execute.c index 81041bbea..6e011ba2f 100644 --- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -1944,7 +1944,10 @@ call_def_function( { SOURCING_LNUM = iptr->isn_lnum; if (var_check_permission(di, name) == FAIL) + { + clear_tv(STACK_TV_BOT(0)); goto on_error; + } clear_tv(&di->di_tv); di->di_tv = *STACK_TV_BOT(0); } @@ -1966,7 +1969,10 @@ call_def_function( // the value needs to be checked here. SOURCING_LNUM = iptr->isn_lnum; if (value_check_lock(sv->sv_tv->v_lock, sv->sv_name, FALSE)) + { + clear_tv(STACK_TV_BOT(0)); goto on_error; + } clear_tv(sv->sv_tv); *sv->sv_tv = *STACK_TV_BOT(0); -- 2.50.1