aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/testing.c
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-05-05 06:22:18 +0800
committerGitHub <noreply@github.com>2023-05-05 06:22:18 +0800
commitf6299e9d6e13935cc67c2fab16c1a5f6dbc515f3 (patch)
treed08a567ba549e22b8cf39229874d06e0077280eb /src/nvim/testing.c
parentb16729f8162ce21a52f079c3849f5011b768d0ce (diff)
downloadrneovim-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.c22
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);
}