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:
Jan Edmund Lazo 2020-03-07 23:15:25 -05:00
parent 1ad414f6ee
commit b00650cfe9
No known key found for this signature in database
GPG Key ID: 64915E6E9F735B15
2 changed files with 14 additions and 0 deletions

View File

@ -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;
} }

View File

@ -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