diff options
author | Timo Teräs <timo.teras@iki.fi> | 2010-08-06 11:34:11 +0300 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2010-08-06 16:10:28 +0200 |
commit | ace0878b0b708e1b04e9e7a62f26c1dc3b9295b5 (patch) | |
tree | 1d8a037744061620af2f66846d041878bdebe150 /libc/misc/internals/parse_config.c | |
parent | 7a450ac87de9007fe5e7b738934f73fc14cabec7 (diff) |
config parser: fix memory corruption
fgets will happily write over allocated area limits. Adjusted the
buffer size according to how much is already read.
Also increase the maximum default line length, as 80 is slightly
small. It might be better if bb_get_chunk_with_continuation would
reallocate the line buffer if it was not user given.
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Diffstat (limited to 'libc/misc/internals/parse_config.c')
-rw-r--r-- | libc/misc/internals/parse_config.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/libc/misc/internals/parse_config.c b/libc/misc/internals/parse_config.c index cbb6ef7f1..9ddf3ee38 100644 --- a/libc/misc/internals/parse_config.c +++ b/libc/misc/internals/parse_config.c @@ -60,7 +60,7 @@ static off_t bb_get_chunk_with_continuation(parser_t* parsr) char *chp; while (1) { - if (fgets(parsr->line + pos, parsr->line_len, parsr->fp) == NULL) { + if (fgets(parsr->line + pos, parsr->line_len - pos, parsr->fp) == NULL) { memset(parsr->line, 0, parsr->line_len); pos = -1; break; @@ -179,7 +179,7 @@ int attribute_hidden FAST_FUNC config_read(parser_t *parser, char ***tokens, again: if (parser->data == NULL) { if (parser->line_len == 0) - parser->line_len = 81; + parser->line_len = PAGE_SIZE; if (parser->data_len == 0) parser->data_len += 1 + ntokens * sizeof(char *); parser->data = realloc(parser->data, |