Mercurial > vim
changeset 32456:d23a137f43c0 v9.0.1559
patch 9.0.1559: function argument types not always checked
Commit: https://github.com/vim/vim/commit/2ba51236fb7c27fe16dad4c44242f00e17c19726
Author: Bram Moolenaar <Bram@vim.org>
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)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 15 May 2023 17:30:05 +0200 |
parents | 09557c2242ab |
children | 7baa8dbd059e |
files | src/testdir/test_vim9_func.vim src/userfunc.c src/version.c src/vim9type.c |
diffstat | 4 files changed, 57 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
index ffb8de48dd0b0645ce7694bfa1782a1f0cef2020..ecdbd5eacaa9980a75d71ad9c3811e73dc2db8ff GIT binary patch literal 106125 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 Ui|c1kdg5$4e>M-ZOE}K{55v9Y*#H0l
--- 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); } }
--- 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,
--- 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;