mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:8.2.0361: internal error when using "0" for a callback
Problem: Internal error when using "0" for a callback.
Solution: Give a normal error. (closes vim/vim#5743)
14e57909e6
This commit is contained in:
parent
1ad414f6ee
commit
b00650cfe9
@ -8114,10 +8114,16 @@ void get_system_output_as_rettv(typval_T *argvars, typval_T *rettv,
|
|||||||
bool callback_from_typval(Callback *const callback, typval_T *const arg)
|
bool callback_from_typval(Callback *const callback, typval_T *const arg)
|
||||||
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT
|
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT
|
||||||
{
|
{
|
||||||
|
int r = OK;
|
||||||
|
|
||||||
if (arg->v_type == VAR_PARTIAL && arg->vval.v_partial != NULL) {
|
if (arg->v_type == VAR_PARTIAL && arg->vval.v_partial != NULL) {
|
||||||
callback->data.partial = arg->vval.v_partial;
|
callback->data.partial = arg->vval.v_partial;
|
||||||
callback->data.partial->pt_refcount++;
|
callback->data.partial->pt_refcount++;
|
||||||
callback->type = kCallbackPartial;
|
callback->type = kCallbackPartial;
|
||||||
|
} else if (arg->v_type == VAR_STRING
|
||||||
|
&& arg->vval.v_string != NULL
|
||||||
|
&& ascii_isdigit(*arg->vval.v_string)) {
|
||||||
|
r = FAIL;
|
||||||
} else if (arg->v_type == VAR_FUNC || arg->v_type == VAR_STRING) {
|
} else if (arg->v_type == VAR_FUNC || arg->v_type == VAR_STRING) {
|
||||||
char_u *name = arg->vval.v_string;
|
char_u *name = arg->vval.v_string;
|
||||||
func_ref(name);
|
func_ref(name);
|
||||||
@ -8126,6 +8132,10 @@ bool callback_from_typval(Callback *const callback, typval_T *const arg)
|
|||||||
} else if (arg->v_type == VAR_NUMBER && arg->vval.v_number == 0) {
|
} else if (arg->v_type == VAR_NUMBER && arg->vval.v_number == 0) {
|
||||||
callback->type = kCallbackNone;
|
callback->type = kCallbackNone;
|
||||||
} else {
|
} else {
|
||||||
|
r = FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (r == FAIL) {
|
||||||
EMSG(_("E921: Invalid callback argument"));
|
EMSG(_("E921: Invalid callback argument"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -339,4 +339,8 @@ func Test_nocatch_garbage_collect()
|
|||||||
delfunc FeedChar
|
delfunc FeedChar
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_timer_invalid_callback()
|
||||||
|
call assert_fails('call timer_start(0, "0")', 'E921')
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
Loading…
Reference in New Issue
Block a user