diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-08-01 16:29:47 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-08-01 16:29:47 +0200 |
commit | 0588d4f9d2741f35a271400a37fddbdd72d84219 (patch) | |
tree | b74126a783b0d3f644d065640fa66751a6ed3e2a | |
parent | 2d3d60a7d4b410668dfc427120205ccf88789db4 (diff) | |
download | vim-git-0588d4f9d2741f35a271400a37fddbdd72d84219.tar.gz |
patch 7.4.2139v7.4.2139
Problem: :delfunction causes illegal memory access.
Solution: Correct logic when deciding to free a function.
-rw-r--r-- | src/testdir/test_lambda.vim | 5 | ||||
-rw-r--r-- | src/userfunc.c | 2 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 5 insertions, 4 deletions
diff --git a/src/testdir/test_lambda.vim b/src/testdir/test_lambda.vim index 721c47de1..1df1f1c3e 100644 --- a/src/testdir/test_lambda.vim +++ b/src/testdir/test_lambda.vim @@ -267,7 +267,6 @@ func Test_closure_refcount() call assert_equal(2, g:Count()) call assert_equal(3, g:Count2()) - " This causes memory access errors. - " delfunc LambdaFoo - " delfunc LambdaBar + delfunc LambdaFoo + delfunc LambdaBar endfunc diff --git a/src/userfunc.c b/src/userfunc.c index a9dc4e843..b74204667 100644 --- a/src/userfunc.c +++ b/src/userfunc.c @@ -2711,7 +2711,7 @@ ex_delfunction(exarg_T *eap) * Numbered functions and lambdas snould be kept if the refcount is * one or more. */ if (fp->uf_refcount > (isdigit(fp->uf_name[0]) - || fp->uf_name[0] == '<') ? 0 : 1) + || fp->uf_name[0] == '<' ? 0 : 1)) { /* Function is still referenced somewhere. Don't free it but * do remove it from the hashtable. */ diff --git a/src/version.c b/src/version.c index f1eb1fff3..6f505db11 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 */ /**/ + 2139, +/**/ 2138, /**/ 2137, |