summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-08-01 16:29:47 +0200
committerBram Moolenaar <Bram@vim.org>2016-08-01 16:29:47 +0200
commit0588d4f9d2741f35a271400a37fddbdd72d84219 (patch)
treeb74126a783b0d3f644d065640fa66751a6ed3e2a
parent2d3d60a7d4b410668dfc427120205ccf88789db4 (diff)
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.vim5
-rw-r--r--src/userfunc.c2
-rw-r--r--src/version.c2
3 files changed, 5 insertions, 4 deletions
diff --git a/src/testdir/test_lambda.vim b/src/testdir/test_lambda.vim
index 721c47de11..1df1f1c3e3 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 a9dc4e843d..b742046679 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 f1eb1fff31..6f505db116 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,