mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.2.4528: crash when using null_function for a partial
Problem: Crash when using null_function for a partial. Solution: Don't call fname_trans_sid() with NULL. (closes #9908)
This commit is contained in:
parent
0b40d086b3
commit
673bcb10eb
@ -3337,6 +3337,15 @@ def Test_partial_double_nested()
|
||||
assert_equal(123, RefRef())
|
||||
enddef
|
||||
|
||||
def Test_partial_null_function()
|
||||
var lines =<< trim END
|
||||
var d: dict<func> = {f: null_function}
|
||||
var Ref = d.f
|
||||
assert_equal('func', typename(Ref))
|
||||
END
|
||||
v9.CheckDefAndScriptSuccess(lines)
|
||||
enddef
|
||||
|
||||
" Using "idx" from a legacy global function does not work.
|
||||
" This caused a crash when called from legacy context.
|
||||
func Test_partial_call_fails()
|
||||
|
@ -5730,7 +5730,6 @@ func_has_abort(
|
||||
make_partial(dict_T *selfdict_in, typval_T *rettv)
|
||||
{
|
||||
char_u *fname;
|
||||
char_u *tofree = NULL;
|
||||
ufunc_T *fp;
|
||||
char_u fname_buf[FLEN_FIXED + 1];
|
||||
int error;
|
||||
@ -5742,13 +5741,19 @@ make_partial(dict_T *selfdict_in, typval_T *rettv)
|
||||
{
|
||||
fname = rettv->v_type == VAR_FUNC ? rettv->vval.v_string
|
||||
: rettv->vval.v_partial->pt_name;
|
||||
// Translate "s:func" to the stored function name.
|
||||
fname = fname_trans_sid(fname, fname_buf, &tofree, &error);
|
||||
fp = find_func(fname, FALSE);
|
||||
vim_free(tofree);
|
||||
if (fname != NULL)
|
||||
{
|
||||
char_u *tofree = NULL;
|
||||
|
||||
// Translate "s:func" to the stored function name.
|
||||
fname = fname_trans_sid(fname, fname_buf, &tofree, &error);
|
||||
fp = find_func(fname, FALSE);
|
||||
vim_free(tofree);
|
||||
}
|
||||
}
|
||||
|
||||
if (fp != NULL && (fp->uf_flags & FC_DICT))
|
||||
if ((fp != NULL && (fp->uf_flags & FC_DICT))
|
||||
|| (rettv->v_type == VAR_FUNC && rettv->vval.v_string == NULL))
|
||||
{
|
||||
partial_T *pt = ALLOC_CLEAR_ONE(partial_T);
|
||||
|
||||
|
@ -750,6 +750,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
4528,
|
||||
/**/
|
||||
4527,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user