# HG changeset patch # User John W. Eaton # Date 1636748165 18000 # Node ID fca639cb78b8f1d29c6992988f134d7480f5bcf8 # Parent 4aa5b391f0d341d7088244faadec7aac55274804 detect fcn called with too many args when arg list not present (bug #61471) * pt-eval.cc (tree_evaluator::define_parameter_list_from_arg_vector): Check for valid param_list here. (tree_evaluator::execute_user_function): Not here. Also check for function call with too many arguments when param_list is nullptr. diff -r 4aa5b391f0d3 -r fca639cb78b8 libinterp/parse-tree/pt-eval.cc --- a/libinterp/parse-tree/pt-eval.cc Fri Nov 12 13:39:40 2021 -0500 +++ b/libinterp/parse-tree/pt-eval.cc Fri Nov 12 15:16:05 2021 -0500 @@ -2199,6 +2199,9 @@ tree_evaluator::define_parameter_list_from_arg_vector (tree_parameter_list *param_list, const octave_value_list& args) { + if (! param_list || param_list->varargs_only ()) + return; + int i = -1; for (tree_decl_elt *elt : *param_list) @@ -3395,21 +3398,24 @@ tree_parameter_list *param_list = user_function.parameter_list (); + bool takes_varargs = false; + int max_inputs = 0; + if (param_list) { - int max_inputs = param_list->length (); - - if (! param_list->takes_varargs () && nargin > max_inputs) - { - std::string name = user_function.name (); - - error ("%s: function called with too many inputs", name.c_str ()); - } - - if (! param_list->varargs_only ()) - define_parameter_list_from_arg_vector (param_list, args); + takes_varargs = param_list->takes_varargs (); + max_inputs = param_list->length (); } + if (! takes_varargs && nargin > max_inputs) + { + std::string name = user_function.name (); + + error ("%s: function called with too many inputs", name.c_str ()); + } + + define_parameter_list_from_arg_vector (param_list, args); + tree_parameter_list *ret_list = user_function.return_list (); if (ret_list && ! ret_list->takes_varargs ())