1515#include <limits.h>
1616#include <dirent.h>
1717
18+ #define MAX_PARAM 8
19+
1820/*
1921 * returns the last-modified time of the file
2022 *
@@ -117,10 +119,8 @@ int sys_search_path(const char *path, const char *file, char *retbuf) {
117119 * ip - expression's address
118120 */
119121void exec_usefunc (var_t * var , bcip_t ip ) {
120- var_t * old_x ;
121-
122122 // save X
123- old_x = v_clone (tvar [SYSVAR_X ]);
123+ var_t * old_x = v_clone (tvar [SYSVAR_X ]);
124124
125125 // run
126126 v_set (tvar [SYSVAR_X ], var );
@@ -142,11 +142,9 @@ void exec_usefunc(var_t *var, bcip_t ip) {
142142 * ip - expression's address
143143 */
144144void exec_usefunc2 (var_t * var1 , var_t * var2 , bcip_t ip ) {
145- var_t * old_x , * old_y ;
146-
147145 // save X
148- old_x = v_clone (tvar [SYSVAR_X ]);
149- old_y = v_clone (tvar [SYSVAR_Y ]);
146+ var_t * old_x = v_clone (tvar [SYSVAR_X ]);
147+ var_t * old_y = v_clone (tvar [SYSVAR_Y ]);
150148
151149 // run
152150 v_set (tvar [SYSVAR_X ], var1 );
@@ -261,13 +259,12 @@ void logprint_var(var_t *v) {
261259 * skip parameter
262260 */
263261void par_skip () {
264- byte exitf = 0 , code ;
262+ byte exitf = 0 ;
265263 uint32_t len ;
266264 int level = 0 ;
267265
268266 do {
269- code = code_peek ();
270- switch (code ) {
267+ switch (code_peek ()) {
271268 case kwTYPE_INT : // integer
272269 prog_ip += OS_INTSZ + 1 ;
273270 break ;
@@ -313,15 +310,17 @@ void par_skip() {
313310 case kwTYPE_LINE :
314311 case kwTYPE_EOC :
315312 case kwUSE :
316- if (level != 0 )
313+ if (level != 0 ) {
317314 rt_raise ("Block error!" );
315+ }
318316 exitf = 1 ;
319317 break ;
320318 case kwTYPE_SEP :
321- if (level <= 0 )
319+ if (level <= 0 ) {
322320 exitf = 1 ;
323- else
321+ } else {
324322 prog_ip += 2 ;
323+ }
325324 break ;
326325 default :
327326 prog_ip ++ ;
@@ -333,10 +332,7 @@ void par_skip() {
333332 * get next parameter as var_t
334333 */
335334void par_getvar (var_t * var ) {
336- byte code ;
337-
338- code = code_peek ();
339- switch (code ) {
335+ switch (code_peek ()) {
340336 case kwTYPE_LINE :
341337 case kwTYPE_EOC :
342338 case kwTYPE_SEP :
@@ -352,11 +348,9 @@ void par_getvar(var_t *var) {
352348 * get next parameter as var_t/array
353349 */
354350var_t * par_getvarray () {
355- byte code ;
356351 var_t * var ;
357352
358- code = code_peek ();
359- switch (code ) {
353+ switch (code_peek ()) {
360354 case kwTYPE_LINE :
361355 case kwTYPE_EOC :
362356 case kwTYPE_SEP :
@@ -392,10 +386,7 @@ var_t *par_getvar_ptr() {
392386 * get next parameter as var_t
393387 */
394388void par_getstr (var_t * var ) {
395- byte code ;
396-
397- code = code_peek ();
398- switch (code ) {
389+ switch (code_peek ()) {
399390 case kwTYPE_LINE :
400391 case kwTYPE_EOC :
401392 case kwTYPE_SEP :
@@ -417,11 +408,10 @@ void par_getstr(var_t *var) {
417408 */
418409var_int_t par_getint () {
419410 var_t var ;
420- var_int_t i ;
421411
422412 v_init (& var );
423413 par_getvar (& var );
424- i = v_getint (& var );
414+ var_int_t i = v_getint (& var );
425415 v_free (& var );
426416
427417 return i ;
@@ -432,11 +422,10 @@ var_int_t par_getint() {
432422 */
433423var_num_t par_getnum () {
434424 var_t var ;
435- var_num_t f ;
436425
437426 v_init (& var );
438427 par_getvar (& var );
439- f = v_getval (& var );
428+ var_num_t f = v_getval (& var );
440429 v_free (& var );
441430
442431 return f ;
@@ -504,15 +493,10 @@ var_int_t par_getval(var_int_t def) {
504493 * returns the separator
505494 */
506495int par_getsep () {
507- int last_op ;
508- byte code ;
509-
510- code = code_peek ();
511- switch (code ) {
496+ switch (code_peek ()) {
512497 case kwTYPE_SEP :
513498 code_skipnext ();
514- last_op = code_getnext ();
515- return last_op ;
499+ return code_getnext ();
516500 default :
517501 err_missing_sep ();
518502 };
@@ -907,27 +891,23 @@ void par_freepartable(par_t **ptable_pp, int pcount) {
907891 * IF THERE IS NO ERROR, CALL TO par_freepartable IS NOT NEEDED
908892 */
909893int par_getpartable (par_t * * ptable_pp , const char * valid_sep ) {
910- byte ready , last_sep = 0 ;
911- par_t * ptable ;
912894 bcip_t ofs ;
913895 char vsep [8 ];
896+
897+ // initialize
914898 var_t * par = NULL ;
899+ byte last_sep = 0 ;
915900 int pcount = 0 ;
916-
917- /*
918- * initialize
919- */
920- ptable = * ptable_pp = malloc (sizeof (par_t ) * 256 );
901+ par_t * ptable = * ptable_pp = malloc (sizeof (par_t ) * MAX_PARAM );
921902
922903 if (valid_sep ) {
923904 strlcpy (vsep , valid_sep , sizeof (vsep ));
924905 } else {
925906 strlcpy (vsep , "," , sizeof (vsep ));
926907 }
927- /*
928- * start
929- */
930- ready = 0 ;
908+
909+ // start
910+ byte ready = 0 ;
931911 do {
932912 switch (code_peek ()) {
933913 case kwTYPE_EOC :
@@ -964,7 +944,11 @@ int par_getpartable(par_t **ptable_pp, const char *valid_sep) {
964944 if (code_isvar ()) {
965945 // push parameter
966946 ptable [pcount ].var = code_getvarptr ();
967- pcount ++ ;
947+ if (++ pcount == MAX_PARAM ) {
948+ par_freepartable (ptable_pp , pcount );
949+ err_parfmt (__FILE__ );
950+ return -1 ;
951+ }
968952 break ;
969953 }
970954 // Its no a single variable, its an expression
@@ -980,7 +964,11 @@ int par_getpartable(par_t **ptable_pp, const char *valid_sep) {
980964 // push parameter
981965 ptable [pcount ].var = par ;
982966 ptable [pcount ].flags |= PAR_BYVAL ;
983- pcount ++ ;
967+ if (++ pcount == MAX_PARAM ) {
968+ par_freepartable (ptable_pp , pcount );
969+ err_parfmt (__FILE__ );
970+ return -1 ;
971+ }
984972 } else {
985973 v_free (par );
986974 v_detach (par );
0 commit comments