From: Bram Moolenaar Date: Mon, 20 Feb 2017 22:07:05 +0000 (+0100) Subject: patch 8.0.0344: unlet command leaks memory X-Git-Tag: v8.0.0344 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=49439c4cdf7d2822255f292adda4226656fe144d;p=vim patch 8.0.0344: unlet command leaks memory Problem: Unlet command leaks memory. (Nikolai Pavlov) Solution: Free the memory on error. (closes #1497) --- diff --git a/src/eval.c b/src/eval.c index 3cd73b6ea..b835af8e3 100644 --- a/src/eval.c +++ b/src/eval.c @@ -2079,7 +2079,10 @@ get_lval( } /* existing variable, need to check if it can be changed */ else if (var_check_ro(lp->ll_di->di_flags, name, FALSE)) + { + clear_tv(&var1); return NULL; + } if (len == -1) clear_tv(&var1); diff --git a/src/testdir/test_unlet.vim b/src/testdir/test_unlet.vim index 4c58785f2..c20b0beb7 100644 --- a/src/testdir/test_unlet.vim +++ b/src/testdir/test_unlet.vim @@ -17,3 +17,7 @@ func Test_not_existing() unlet! does_not_exist call assert_fails('unlet does_not_exist', 'E108:') endfunc + +func Test_unlet_fails() + call assert_fails('unlet v:["count"]', 'E46:') +endfunc diff --git a/src/version.c b/src/version.c index 5db4b111c..721485434 100644 --- a/src/version.c +++ b/src/version.c @@ -764,6 +764,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 344, /**/ 343, /**/