From 7a5c46a9df7ef01a4f6a620861c35400d5ad28d9 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 16 Mar 2016 20:41:21 +0100 Subject: [PATCH] patch 7.4.1580 Problem: Crash when using function reference. (Luchr) Solution: Set initial refcount. (Ken Takata, closes #690) --- src/eval.c | 1 + src/testdir/test_partial.vim | 14 ++++++++++++++ src/version.c | 2 ++ 3 files changed, 17 insertions(+) diff --git a/src/eval.c b/src/eval.c index 506932403a..85f209221a 100644 --- a/src/eval.c +++ b/src/eval.c @@ -21705,6 +21705,7 @@ handle_subscript( /* Turn "dict.Func" into a partial for "Func" with "dict". */ if (pt != NULL) { + pt->pt_refcount = 1; pt->pt_dict = selfdict; selfdict = NULL; pt->pt_name = rettv->vval.v_string; diff --git a/src/testdir/test_partial.vim b/src/testdir/test_partial.vim index ddc85e0ef9..acba887cbf 100644 --- a/src/testdir/test_partial.vim +++ b/src/testdir/test_partial.vim @@ -68,3 +68,17 @@ func Test_partial_implicit() call assert_fails('call function(dict.MyFunc, ["bbb"], dict)', 'E924:') endfunc + +fun InnerCall(funcref) + return a:funcref +endfu + +fun OuterCall() + let opt = { 'func' : function('sin') } + call InnerCall(opt.func) +endfu + +func Test_function_in_dict() + call OuterCall() +endfunc + diff --git a/src/version.c b/src/version.c index e4c3412d77..cb291581d2 100644 --- a/src/version.c +++ b/src/version.c @@ -748,6 +748,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1580, /**/ 1579, /**/