Mercurial > dovecot > core-2.2
changeset 12958:b8fa3171f6d7
config: Avoid growing data stack / memory pools.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 20 Apr 2011 18:55:39 +0300 |
parents | 7d60cd847c70 |
children | 127b4e08d3c0 |
files | src/config/config-parser.c src/config/doveconf.c |
diffstat | 2 files changed, 9 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/config/config-parser.c Wed Apr 20 18:55:17 2011 +0300 +++ b/src/config/config-parser.c Wed Apr 20 18:55:39 2011 +0300 @@ -377,7 +377,7 @@ return -1; } - tmp_pool = pool_alloconly_create("config parsers check", 1024*32); + tmp_pool = pool_alloconly_create("config parsers check", 1024*64); parsers = array_get(&ctx->all_parsers, &count); i_assert(count > 0 && parsers[count-1] == NULL); count--; @@ -456,9 +456,9 @@ return -1; } - new_input = t_new(struct input_stack, 1); + new_input = p_new(ctx->pool, struct input_stack, 1); new_input->prev = ctx->cur_input; - new_input->path = t_strdup(path); + new_input->path = p_strdup(ctx->pool, path); new_input->input = i_stream_create_fd(fd, (size_t)-1, TRUE); i_stream_set_return_partial_line(new_input->input, TRUE); ctx->cur_input = new_input; @@ -870,7 +870,7 @@ } memset(&ctx, 0, sizeof(ctx)); - ctx.pool = pool_alloconly_create("config file parser", 1024*64); + ctx.pool = pool_alloconly_create("config file parser", 1024*256); ctx.path = path; for (count = 0; all_roots[count] != NULL; count++) ; @@ -894,7 +894,7 @@ config_add_new_parser(&ctx); ctx.str = str_new(ctx.pool, 256); - full_line = t_str_new(512); + full_line = str_new(default_pool, 512); ctx.cur_input->input = i_stream_create_fd(fd, (size_t)-1, TRUE); i_stream_set_return_partial_line(ctx.cur_input->input, TRUE); old_settings_init(&ctx); @@ -910,9 +910,9 @@ T_BEGIN { handled = old_settings_handle(&ctx, type, key, value); + if (!handled) + config_parser_apply_line(&ctx, type, key, value); } T_END; - if (!handled) - config_parser_apply_line(&ctx, type, key, value); if (ctx.error != NULL) { *error_r = t_strdup_printf( @@ -930,6 +930,7 @@ if (line == NULL && ctx.cur_input != NULL) goto prevfile; + str_free(&full_line); if (ret == 0) ret = config_parse_finish(&ctx, error_r); return ret < 0 ? ret : 1;
--- a/src/config/doveconf.c Wed Apr 20 18:55:17 2011 +0300 +++ b/src/config/doveconf.c Wed Apr 20 18:55:39 2011 +0300 @@ -125,7 +125,7 @@ enum config_dump_flags flags; pool_t pool; - pool = pool_alloconly_create("config human strings", 10240); + pool = pool_alloconly_create("config human strings", 1024*32); ctx = p_new(pool, struct config_dump_human_context, 1); ctx->pool = pool; ctx->list_prefix = str_new(ctx->pool, 128);