diff options
author | Daniel Stenberg <daniel@haxx.se> | 2015-04-17 00:38:50 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2015-04-17 11:44:57 +0200 |
commit | 691a07dac6df0a827aa3f0b3e21000cdb362a7fb (patch) | |
tree | fbc5ff986ab03e85c0f10304819d5cfda480d49b /src | |
parent | 05e4137d313d928d8f5971a50452c683ef3b8205 (diff) | |
download | curl-691a07dac6df0a827aa3f0b3e21000cdb362a7fb.tar.gz |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/tool_parsecfg.c | 35 |
1 files changed, 19 insertions, 16 deletions
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); + } } } |