Skip to content

Commit

Permalink
patch 8.2.5117: crash when calling a Lua callback from a :def function
Browse files Browse the repository at this point in the history
Problem:    Crash when calling a Lua callback from a :def function. (Bohdan
            Makohin)
Solution:   Handle FC_CFUNC in call_user_func_check(). (closes #10587)
  • Loading branch information
brammool committed Jun 17, 2022
1 parent 47f1a55 commit 7d149f8
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 8 deletions.
11 changes: 11 additions & 0 deletions src/testdir/test_lua.vim
Original file line number Diff line number Diff line change
Expand Up @@ -664,6 +664,17 @@ func Test_lua_blob()
\ '[string "vim chunk"]:1: string expected, got table')
endfunc

def Vim9Test(Callback: func())
Callback()
enddef

func Test_call_lua_func_from_vim9_func()
" this only tests that Vim doesn't crash
lua << EOF
vim.fn.Vim9Test(function () print('Hello') end)
EOF
endfunc

func Test_lua_funcref()
function I(x)
return a:x
Expand Down
17 changes: 9 additions & 8 deletions src/userfunc.c
Original file line number Diff line number Diff line change
Expand Up @@ -3021,6 +3021,15 @@ call_user_func_check(
{
int error;

#ifdef FEAT_LUA
if (fp->uf_flags & FC_CFUNC)
{
cfunc_T cb = fp->uf_cb;

return (*cb)(argcount, argvars, rettv, fp->uf_cb_state);
}
#endif

if (fp->uf_flags & FC_RANGE && funcexe->fe_doesrange != NULL)
*funcexe->fe_doesrange = TRUE;
error = check_user_func_argcount(fp, argcount);
Expand Down Expand Up @@ -3584,14 +3593,6 @@ call_func(

if (fp != NULL && (fp->uf_flags & FC_DELETED))
error = FCERR_DELETED;
#ifdef FEAT_LUA
else if (fp != NULL && (fp->uf_flags & FC_CFUNC))
{
cfunc_T cb = fp->uf_cb;

error = (*cb)(argcount, argvars, rettv, fp->uf_cb_state);
}
#endif
else if (fp != NULL)
{
if (funcexe->fe_argv_func != NULL)
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Original file line number Diff line number Diff line change
Expand Up @@ -734,6 +734,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
5117,
/**/
5116,
/**/
Expand Down

0 comments on commit 7d149f8

Please sign in to comment.