diff --git a/src/frontend/inpcom.c b/src/frontend/inpcom.c index b8f76e595..8e4c79351 100644 --- a/src/frontend/inpcom.c +++ b/src/frontend/inpcom.c @@ -51,6 +51,9 @@ Author: 1985 Wayne A. Christopher #define N_PARAMS 1000 #define N_SUBCKT_W_PARAMS 4000 +#define NPARAMS 10000 +#define FCN_PARAMS 1000 + #define VALIDCHARS "!$%_#?@.[]&" static struct library { @@ -2614,6 +2617,11 @@ inp_get_params(char *line, char *param_names[], char *param_values[]) end = skip_back_ws(equal_ptr, line); name = skip_back_non_ws(end, line); + if (num_params == NPARAMS) { + fprintf(stderr, "Error: to many params in a line, max is %d\n", NPARAMS); + controlled_exit(EXIT_FAILURE); + } + param_names[num_params++] = copy_substring(name, end); /* get parameter value */ @@ -2783,10 +2791,10 @@ static void inp_fix_inst_calls_for_numparam(struct names *subckt_w_params, struct card *deck) { struct card *c; - char *subckt_param_names[1000]; - char *subckt_param_values[1000]; - char *inst_param_names[1000]; - char *inst_param_values[1000]; + char *subckt_param_names[NPARAMS]; + char *subckt_param_values[NPARAMS]; + char *inst_param_names[NPARAMS]; + char *inst_param_values[NPARAMS]; int i; // first iterate through instances and find occurences where 'm' multiplier needs to be @@ -3181,7 +3189,7 @@ static char* inp_expand_macro_in_str(struct function_env *env, char *str) { struct function *function; - char *open_paren_ptr, *close_paren_ptr, *fcn_name, *params[1000]; + char *open_paren_ptr, *close_paren_ptr, *fcn_name, *params[FCN_PARAMS]; char *curr_ptr, *macro_str, *curr_str = NULL; int num_params, i; char *orig_ptr = str, *search_ptr = str, *orig_str = copy(str); @@ -3260,6 +3268,10 @@ inp_expand_macro_in_str(struct function_env *env, char *str) if (*curr_ptr == ',' && num_parens == 0) break; } + if (num_params == FCN_PARAMS) { + fprintf(stderr, "Error: Too many params in fcn, max is %d\n", FCN_PARAMS); + controlled_exit(EXIT_FAILURE); + } params[num_params++] = inp_expand_macro_in_str(env, copy_substring(beg_parameter, curr_ptr)); }