1
0
forked from aniani/vim

patch 7.4.2139

Problem:    :delfunction causes illegal memory access.
Solution:   Correct logic when deciding to free a function.
This commit is contained in:
Bram Moolenaar
2016-08-01 16:29:47 +02:00
parent 2d3d60a7d4
commit 0588d4f9d2
3 changed files with 5 additions and 4 deletions

View File

@@ -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

View File

@@ -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. */

View File

@@ -763,6 +763,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
2139,
/**/
2138,
/**/