# HG changeset patch # User Bram Moolenaar # Date 1684164605 -7200 # Node ID d23a137f43c06bead03e97509318c30224e6ed16 # Parent 09557c2242aba9e0fefec7e11982783ddaade99d patch 9.0.1559: function argument types not always checked Commit: https://github.com/vim/vim/commit/2ba51236fb7c27fe16dad4c44242f00e17c19726 Author: Bram Moolenaar Date: Mon May 15 16:22:38 2023 +0100 patch 9.0.1559: function argument types not always checked Problem: Function argument types not always checked and using v:none may cause an error. Solution: Check argument types once the function type is known. Do not give an error for using v:none as an argument. (closes #12200) diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim index ffb8de48dd0b0645ce7694bfa1782a1f0cef2020..ecdbd5eacaa9980a75d71ad9c3811e73dc2db8ff GIT binary patch literal 106125 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

fr5tZ|Xb)m<#WO88`kuqCC;Q~+i8 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 Ui|c1kdg5$4e>M-ZOE}K{55v9Y*#H0l diff --git a/src/userfunc.c b/src/userfunc.c --- a/src/userfunc.c +++ b/src/userfunc.c @@ -3596,6 +3596,34 @@ user_func_error(funcerror_T error, char_ } /* + * Check the argument types "argvars[argcount]" for "name" using the + * information in "funcexe". When "base_included" then "funcexe->fe_basetv" + * is already included in "argvars[]". + * Will do nothing if "funcexe->fe_check_type" is NULL or + * "funcexe->fe_evaluate" is FALSE; + * Returns an FCERR_ value. + */ + static funcerror_T +may_check_argument_types( + funcexe_T *funcexe, + typval_T *argvars, + int argcount, + int base_included, + char_u *name) +{ + if (funcexe->fe_check_type != NULL && funcexe->fe_evaluate) + { + // Check that the argument types are OK for the types of the funcref. + if (check_argument_types(funcexe->fe_check_type, + argvars, argcount, + base_included ? NULL : funcexe->fe_basetv, + name) == FAIL) + return FCERR_OTHER; + } + return FCERR_NONE; +} + +/* * Call a function with its resolved parameters * * Return FAIL when the function can't be called, OK otherwise. @@ -3691,15 +3719,10 @@ call_func( } } - if (error == FCERR_NONE && funcexe->fe_check_type != NULL - && funcexe->fe_evaluate) - { - // Check that the argument types are OK for the types of the funcref. - if (check_argument_types(funcexe->fe_check_type, - argvars, argcount, funcexe->fe_basetv, - (name != NULL) ? name : funcname) == FAIL) - error = FCERR_OTHER; - } + if (error == FCERR_NONE) + // check the argument types if possible + error = may_check_argument_types(funcexe, argvars, argcount, FALSE, + (name != NULL) ? name : funcname); if (error == FCERR_NONE && funcexe->fe_evaluate) { @@ -3761,10 +3784,20 @@ call_func( error = FCERR_DELETED; else if (fp != NULL) { + int need_arg_check = FALSE; + if (funcexe->fe_check_type == NULL) + { + funcexe->fe_check_type = fp->uf_func_type; + need_arg_check = TRUE; + } + if (funcexe->fe_argv_func != NULL) + { // postponed filling in the arguments, do it now argcount = funcexe->fe_argv_func(argcount, argvars, - argv_clear, fp); + argv_clear, fp); + need_arg_check = TRUE; + } if (funcexe->fe_basetv != NULL) { @@ -3774,9 +3807,16 @@ call_func( argcount++; argvars = argv; argv_base = 1; + need_arg_check = TRUE; } - error = call_user_func_check(fp, argcount, argvars, rettv, + // Check the argument types now that the function type and all + // argument values are known, if not done above. + if (need_arg_check) + error = may_check_argument_types(funcexe, argvars, argcount, + TRUE, (name != NULL) ? name : funcname); + if (error == FCERR_NONE || error == FCERR_UNKNOWN) + error = call_user_func_check(fp, argcount, argvars, rettv, funcexe, selfdict); } } diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1559, +/**/ 1558, /**/ 1557, diff --git a/src/vim9type.c b/src/vim9type.c --- a/src/vim9type.c +++ b/src/vim9type.c @@ -970,7 +970,10 @@ check_argument_types( } else expected = type->tt_args[i]; - if (check_typval_arg_type(expected, tv, NULL, i + 1) == FAIL) + + // check the type, unless the value is v:none + if ((tv->v_type != VAR_SPECIAL || tv->vval.v_number != VVAL_NONE) + && check_typval_arg_type(expected, tv, NULL, i + 1) == FAIL) return FAIL; } return OK;