Mercurial > vim
changeset 9727:8436bb5134f5 v7.4.2139
commit https://github.com/vim/vim/commit/0588d4f9d2741f35a271400a37fddbdd72d84219
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Aug 1 16:29:47 2016 +0200
patch 7.4.2139
Problem: :delfunction causes illegal memory access.
Solution: Correct logic when deciding to free a function.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Mon, 01 Aug 2016 16:30:07 +0200 |
parents | 45d404749bb0 |
children | 6ed73116052c |
files | src/testdir/test_lambda.vim src/userfunc.c src/version.c |
diffstat | 3 files changed, 5 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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. */