From: Daniel Stenberg Date: Thu, 16 Apr 2015 22:38:50 +0000 (+0200) Subject: parsecfg: do not continue past a zero termination X-Git-Tag: curl-7_42_0~22 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=691a07dac6df0a827aa3f0b3e21000cdb362a7fb;p=curl parsecfg: do not continue past a zero termination When a config file line ends without newline, the parsing function could continue reading beyond that point in memory. Reported-by: Hanno Böck --- diff --git a/src/tool_parsecfg.c b/src/tool_parsecfg.c index fabdbc20b..4c25ddbd5 100644 --- a/src/tool_parsecfg.c +++ b/src/tool_parsecfg.c @@ -187,24 +187,27 @@ int parseconfig(const char *filename, struct GlobalConfig *global) param = line; /* parameter starts here */ while(*line && !ISSPACE(*line)) line++; - *line = '\0'; /* zero terminate */ - /* to detect mistakes better, see if there's data following */ - line++; - /* pass all spaces */ - while(*line && ISSPACE(*line)) - line++; + if(*line) { + *line = '\0'; /* zero terminate */ - switch(*line) { - case '\0': - case '\r': - case '\n': - case '#': /* comment */ - break; - default: - warnf(operation->global, "%s:%d: warning: '%s' uses unquoted white " - "space in the line that may cause side-effects!\n", - filename, lineno, option); + /* to detect mistakes better, see if there's data following */ + line++; + /* pass all spaces */ + while(*line && ISSPACE(*line)) + line++; + + switch(*line) { + case '\0': + case '\r': + case '\n': + case '#': /* comment */ + break; + default: + warnf(operation->global, "%s:%d: warning: '%s' uses unquoted " + "white space in the line that may cause side-effects!\n", + filename, lineno, option); + } } }