Mercurial > vim
changeset 24325:52a0e187264b v8.2.2703
patch 8.2.2703: Vim9: memory leak when failing on locked variable
Commit: https://github.com/vim/vim/commit/6e50ec2f0af85940e40ed3f897bfcfa445adbb0e
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Apr 3 19:32:44 2021 +0200
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.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 03 Apr 2021 19:45:03 +0200 |
parents | 95ee4d33e491 |
children | 7fb9981b8c4f |
files | src/testdir/test_vim9_assign.vim src/version.c src/vim9execute.c |
diffstat | 3 files changed, 10 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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 */ /**/ + 2703, +/**/ 2702, /**/ 2701,
--- 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);