# HG changeset patch # User szabii # Date 992216420 0 # Node ID fd0d77973d080f7547344aabf603bf0bf10b0fcc # Parent b2a29e1224e4223904c3333e6099a92f58a06a3a bugfix diff -r b2a29e1224e4 -r fd0d77973d08 cfgparser.c --- a/cfgparser.c Sun Jun 10 23:06:44 2001 +0000 +++ b/cfgparser.c Sun Jun 10 23:40:20 2001 +0000 @@ -241,6 +241,7 @@ int opt_pos; /* opt pos */ int param_pos; /* param pos */ int ret = 1; + int errors = 0; #ifdef DEBUG assert(conffile != NULL); @@ -276,6 +277,12 @@ printf("\n"); while (fgets(line, MAX_LINE_LEN, fp)) { +nextline: + if (errors >= 16) { + printf("too many errors\n"); + goto out; + } + line_num++; line_pos = 0; @@ -296,14 +303,16 @@ if (opt_pos >= MAX_OPT_LEN) { PRINT_LINENUM; printf("too long option\n"); + errors++; ret = -1; - continue; + goto nextline; } } if (opt_pos == 0) { PRINT_LINENUM; printf("parse error\n"); ret = -1; + errors++; continue; } opt[opt_pos] = '\0'; @@ -321,6 +330,7 @@ PRINT_LINENUM; printf("option without parameter\n"); ret = -1; + errors++; continue; } @@ -338,7 +348,8 @@ PRINT_LINENUM; printf("too long parameter\n"); ret = -1; - continue; + errors++; + goto nextline; } } line_pos++; /* skip the closing " or ' */ @@ -350,7 +361,8 @@ PRINT_LINENUM; printf("too long parameter\n"); ret = -1; - continue; + errors++; + goto nextline; } } } @@ -361,6 +373,7 @@ PRINT_LINENUM; printf("option without parameter\n"); ret = -1; + errors++; continue; } #ifdef DEBUG @@ -388,6 +401,7 @@ PRINT_LINENUM; printf("%s\n", opt); ret = -1; + errors++; continue; /* break */ }