summaryrefslogtreecommitdiffstats
path: root/cfgparser.c
diff options
context:
space:
mode:
authorszabii <szabii@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-06-10 23:40:20 +0000
committerszabii <szabii@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-06-10 23:40:20 +0000
commitd646cfabf3a815bcb4a675f6f232e736adc2c3f9 (patch)
treec525c29ae2e6eeb93163178a73f952ea58e8da1e /cfgparser.c
parentd4239d7b1e2cf6d8880ab43b53a25012a8261012 (diff)
downloadmpv-d646cfabf3a815bcb4a675f6f232e736adc2c3f9.tar.bz2
mpv-d646cfabf3a815bcb4a675f6f232e736adc2c3f9.tar.xz
bugfix
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1091 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'cfgparser.c')
-rw-r--r--cfgparser.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/cfgparser.c b/cfgparser.c
index e47f886901..b16c44e67a 100644
--- a/cfgparser.c
+++ b/cfgparser.c
@@ -241,6 +241,7 @@ int parse_config_file(struct config *conf, char *conffile)
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 @@ int parse_config_file(struct config *conf, char *conffile)
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 @@ int parse_config_file(struct config *conf, char *conffile)
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 @@ int parse_config_file(struct config *conf, char *conffile)
PRINT_LINENUM;
printf("option without parameter\n");
ret = -1;
+ errors++;
continue;
}
@@ -338,7 +348,8 @@ int parse_config_file(struct config *conf, char *conffile)
PRINT_LINENUM;
printf("too long parameter\n");
ret = -1;
- continue;
+ errors++;
+ goto nextline;
}
}
line_pos++; /* skip the closing " or ' */
@@ -350,7 +361,8 @@ int parse_config_file(struct config *conf, char *conffile)
PRINT_LINENUM;
printf("too long parameter\n");
ret = -1;
- continue;
+ errors++;
+ goto nextline;
}
}
}
@@ -361,6 +373,7 @@ int parse_config_file(struct config *conf, char *conffile)
PRINT_LINENUM;
printf("option without parameter\n");
ret = -1;
+ errors++;
continue;
}
#ifdef DEBUG
@@ -388,6 +401,7 @@ int parse_config_file(struct config *conf, char *conffile)
PRINT_LINENUM;
printf("%s\n", opt);
ret = -1;
+ errors++;
continue;
/* break */
}