diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-05-05 06:22:18 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-05 06:22:18 +0800 |
commit | f6299e9d6e13935cc67c2fab16c1a5f6dbc515f3 (patch) | |
tree | d08a567ba549e22b8cf39229874d06e0077280eb /src/nvim/testing.c | |
parent | b16729f8162ce21a52f079c3849f5011b768d0ce (diff) | |
download | rneovim-f6299e9d6e13935cc67c2fab16c1a5f6dbc515f3.tar.gz rneovim-f6299e9d6e13935cc67c2fab16c1a5f6dbc515f3.tar.bz2 rneovim-f6299e9d6e13935cc67c2fab16c1a5f6dbc515f3.zip |
vim-patch:8.2.3221: Vim9: argument types are not checked at compile time (#23480)
Problem: Vim9: argument types are not checked at compile time.
Solution: Add several more type checks. (Yegappan Lakshmanan, closes vim/vim#8632)
https://github.com/vim/vim/commit/a764e73d4ffc5d046807c757eaacb9b0a5408152
Cherry-pick test_assert.vim change from patch 8.2.3229.
Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Diffstat (limited to 'src/nvim/testing.c')
-rw-r--r-- | src/nvim/testing.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/nvim/testing.c b/src/nvim/testing.c index 0e779f9b8d..4a48743b44 100644 --- a/src/nvim/testing.c +++ b/src/nvim/testing.c @@ -500,12 +500,23 @@ void f_assert_exception(typval_T *argvars, typval_T *rettv, EvalFuncData fptr) /// "assert_fails(cmd [, error [, msg]])" function void f_assert_fails(typval_T *argvars, typval_T *rettv, EvalFuncData fptr) { - const char *const cmd = tv_get_string_chk(&argvars[0]); garray_T ga; - int save_trylevel = trylevel; + const int save_trylevel = trylevel; const int called_emsg_before = called_emsg; const char *wrong_arg_msg = NULL; + if (tv_check_for_string_or_number_arg(argvars, 0) == FAIL + || tv_check_for_opt_string_or_list_arg(argvars, 1) == FAIL + || (argvars[1].v_type != VAR_UNKNOWN + && (argvars[2].v_type != VAR_UNKNOWN + && (tv_check_for_opt_number_arg(argvars, 3) == FAIL + || (argvars[3].v_type != VAR_UNKNOWN + && tv_check_for_opt_string_arg(argvars, 4) == FAIL))))) { + return; + } + + const char *const cmd = tv_get_string_chk(&argvars[0]); + // trylevel must be zero for a ":throw" command to be considered failed trylevel = 0; suppress_errthrow = true; @@ -682,6 +693,13 @@ static int assert_inrange(typval_T *argvars) /// "assert_inrange(lower, upper[, msg])" function void f_assert_inrange(typval_T *argvars, typval_T *rettv, EvalFuncData fptr) { + if (tv_check_for_float_or_nr_arg(argvars, 0) == FAIL + || tv_check_for_float_or_nr_arg(argvars, 1) == FAIL + || tv_check_for_float_or_nr_arg(argvars, 2) == FAIL + || tv_check_for_opt_string_arg(argvars, 3) == FAIL) { + return; + } + rettv->vval.v_number = assert_inrange(argvars); } |