comparison src/userfunc.c @ 29196:e391590249a1 v8.2.5117

patch 8.2.5117: crash when calling a Lua callback from a :def function Commit: https://github.com/vim/vim/commit/7d149f899d423b7bf2b90d7b11ebe3e560c462b9 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Jun 17 19:23:34 2022 +0100 patch 8.2.5117: crash when calling a Lua callback from a :def function Problem: Crash when calling a Lua callback from a :def function. (Bohdan Makohin) Solution: Handle FC_CFUNC in call_user_func_check(). (closes #10587)
author Bram Moolenaar <Bram@vim.org>
date Fri, 17 Jun 2022 20:30:03 +0200
parents b02044bc8c20
children a74398c432a4
comparison
equal deleted inserted replaced
29195:ee8ebed77cee 29196:e391590249a1
3019 funcexe_T *funcexe, 3019 funcexe_T *funcexe,
3020 dict_T *selfdict) 3020 dict_T *selfdict)
3021 { 3021 {
3022 int error; 3022 int error;
3023 3023
3024 #ifdef FEAT_LUA
3025 if (fp->uf_flags & FC_CFUNC)
3026 {
3027 cfunc_T cb = fp->uf_cb;
3028
3029 return (*cb)(argcount, argvars, rettv, fp->uf_cb_state);
3030 }
3031 #endif
3032
3024 if (fp->uf_flags & FC_RANGE && funcexe->fe_doesrange != NULL) 3033 if (fp->uf_flags & FC_RANGE && funcexe->fe_doesrange != NULL)
3025 *funcexe->fe_doesrange = TRUE; 3034 *funcexe->fe_doesrange = TRUE;
3026 error = check_user_func_argcount(fp, argcount); 3035 error = check_user_func_argcount(fp, argcount);
3027 if (error != FCERR_UNKNOWN) 3036 if (error != FCERR_UNKNOWN)
3028 return error; 3037 return error;
3582 fp = find_func(p, is_global); 3591 fp = find_func(p, is_global);
3583 } 3592 }
3584 3593
3585 if (fp != NULL && (fp->uf_flags & FC_DELETED)) 3594 if (fp != NULL && (fp->uf_flags & FC_DELETED))
3586 error = FCERR_DELETED; 3595 error = FCERR_DELETED;
3587 #ifdef FEAT_LUA
3588 else if (fp != NULL && (fp->uf_flags & FC_CFUNC))
3589 {
3590 cfunc_T cb = fp->uf_cb;
3591
3592 error = (*cb)(argcount, argvars, rettv, fp->uf_cb_state);
3593 }
3594 #endif
3595 else if (fp != NULL) 3596 else if (fp != NULL)
3596 { 3597 {
3597 if (funcexe->fe_argv_func != NULL) 3598 if (funcexe->fe_argv_func != NULL)
3598 // postponed filling in the arguments, do it now 3599 // postponed filling in the arguments, do it now
3599 argcount = funcexe->fe_argv_func(argcount, argvars, 3600 argcount = funcexe->fe_argv_func(argcount, argvars,