Mercurial > vim
comparison src/evalvars.c @ 19609:fe827d6267c2 v8.2.0361
patch 8.2.0361: internal error when using "0" for a callback
Commit: https://github.com/vim/vim/commit/14e57909e662a43a42438e2701654af48af49b03
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Mar 7 16:59:25 2020 +0100
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 https://github.com/vim/vim/issues/5743)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 07 Mar 2020 17:00:06 +0100 |
parents | 48e71f948360 |
children | 2ef25a007bb7 |
comparison
equal
deleted
inserted
replaced
19608:2f6e8d14ad36 | 19609:fe827d6267c2 |
---|---|
3641 * "cb_name" is set to NULL for an invalid argument. | 3641 * "cb_name" is set to NULL for an invalid argument. |
3642 */ | 3642 */ |
3643 callback_T | 3643 callback_T |
3644 get_callback(typval_T *arg) | 3644 get_callback(typval_T *arg) |
3645 { | 3645 { |
3646 callback_T res; | 3646 callback_T res; |
3647 int r = OK; | |
3647 | 3648 |
3648 res.cb_free_name = FALSE; | 3649 res.cb_free_name = FALSE; |
3649 if (arg->v_type == VAR_PARTIAL && arg->vval.v_partial != NULL) | 3650 if (arg->v_type == VAR_PARTIAL && arg->vval.v_partial != NULL) |
3650 { | 3651 { |
3651 res.cb_partial = arg->vval.v_partial; | 3652 res.cb_partial = arg->vval.v_partial; |
3653 res.cb_name = partial_name(res.cb_partial); | 3654 res.cb_name = partial_name(res.cb_partial); |
3654 } | 3655 } |
3655 else | 3656 else |
3656 { | 3657 { |
3657 res.cb_partial = NULL; | 3658 res.cb_partial = NULL; |
3658 if (arg->v_type == VAR_FUNC || arg->v_type == VAR_STRING) | 3659 if (arg->v_type == VAR_STRING && arg->vval.v_string != NULL |
3660 && isdigit(*arg->vval.v_string)) | |
3661 r = FAIL; | |
3662 else if (arg->v_type == VAR_FUNC || arg->v_type == VAR_STRING) | |
3659 { | 3663 { |
3660 // Note that we don't make a copy of the string. | 3664 // Note that we don't make a copy of the string. |
3661 res.cb_name = arg->vval.v_string; | 3665 res.cb_name = arg->vval.v_string; |
3662 func_ref(res.cb_name); | 3666 func_ref(res.cb_name); |
3663 } | 3667 } |
3664 else if (arg->v_type == VAR_NUMBER && arg->vval.v_number == 0) | 3668 else if (arg->v_type == VAR_NUMBER && arg->vval.v_number == 0) |
3665 { | |
3666 res.cb_name = (char_u *)""; | 3669 res.cb_name = (char_u *)""; |
3667 } | |
3668 else | 3670 else |
3671 r = FAIL; | |
3672 | |
3673 if (r == FAIL) | |
3669 { | 3674 { |
3670 emsg(_("E921: Invalid callback argument")); | 3675 emsg(_("E921: Invalid callback argument")); |
3671 res.cb_name = NULL; | 3676 res.cb_name = NULL; |
3672 } | 3677 } |
3673 } | 3678 } |