diff --git a/src/xspice/icm/digital/d_process/cfunc.mod b/src/xspice/icm/digital/d_process/cfunc.mod index 7dbbbd7fd..218c08d02 100644 --- a/src/xspice/icm/digital/d_process/cfunc.mod +++ b/src/xspice/icm/digital/d_process/cfunc.mod @@ -51,7 +51,7 @@ SUMMARY double (8-byte): positive value of TIME if reset is low otherwise -TIME [inputs array ]: input bytes, each byte packs up to 8 inputs - ooutputs are defined by returning process + outputs are defined by returning process and process must return: @@ -292,8 +292,8 @@ void cm_d_process(ARGS) { int i; /* generic loop counter index */ - Digital_State_t *reset, /* storage for clock value */ - *reset_old; /* previous clock value */ + Digital_State_t *reset, /* storage for reset value */ + *reset_old; /* previous reset value */ Digital_State_t *clk, /* storage for clock value */ *clk_old; /* previous clock value */ @@ -302,7 +302,8 @@ void cm_d_process(ARGS) if (INIT) { - char * c_argv[1024]; +#define C_ARGV_SIZE 1024 + char * c_argv[C_ARGV_SIZE]; int c_argc = 1; cm_event_alloc(0,sizeof(Digital_State_t)); cm_event_alloc(1,sizeof(Digital_State_t)); @@ -315,12 +316,17 @@ void cm_d_process(ARGS) CALLBACK = cm_d_process_callback; if (!PARAM_NULL(process_params)) { + if (PARAM_SIZE(process_params) > (C_ARGV_SIZE - 2)) { + fprintf(stderr, "Error: too many process_parameters\n"); + exit(1); + } for (i=0; i