From: Timo Sirainen Date: Mon, 2 Dec 2024 22:10:06 +0000 (+0200) Subject: doveadm: Use a separate memory pool for parsing doveadm command line parameters X-Git-Tag: 2.4.0~1404 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a3aee24c80c41dbffb11ecaef9c1cdfe298c6658;p=thirdparty%2Fdovecot%2Fcore.git doveadm: Use a separate memory pool for parsing doveadm command line parameters This avoids spending a lot of the data stack for the actual command processing, causing them to grow the data stack. --- diff --git a/src/doveadm/doveadm-cmd-parse.c b/src/doveadm/doveadm-cmd-parse.c index 518984feaf..257e7d1d31 100644 --- a/src/doveadm/doveadm-cmd-parse.c +++ b/src/doveadm/doveadm-cmd-parse.c @@ -374,12 +374,14 @@ int doveadm_cmdline_run(int argc, const char *const argv[], { ARRAY_TYPE(doveadm_cmd_param_arr_t) pargv; unsigned int pargc; - pool_t pool = pool_datastack_create(); + pool_t pool = pool_alloconly_create("doveadm cmdline", 1024); i_getopt_reset(); p_array_init(&pargv, pool, 20); - if (doveadm_cmd_process_options(argc, argv, cctx, pool, &pargv) < 0) + if (doveadm_cmd_process_options(argc, argv, cctx, pool, &pargv) < 0) { + pool_unref(&pool); return -1; + } unsigned int ptr_count; struct doveadm_cmd_param *ptr = array_get_modifiable(&pargv, &ptr_count); @@ -411,6 +413,7 @@ int doveadm_cmdline_run(int argc, const char *const argv[], e_error(cctx->event, "Invalid parameter: %s", t_strarray_join(argv + optind, " ")); doveadm_cmd_params_clean(&pargv); + pool_unref(&pool); return -1; } found = TRUE; @@ -420,6 +423,7 @@ int doveadm_cmdline_run(int argc, const char *const argv[], e_error(cctx->event, "Extraneous arguments found: %s", t_strarray_join(argv + optind, " ")); doveadm_cmd_params_clean(&pargv); + pool_unref(&pool); return -1; } if (is_keyvalue) @@ -439,6 +443,7 @@ int doveadm_cmdline_run(int argc, const char *const argv[], cctx->cmd->cmd(cctx); doveadm_cmd_params_clean(&pargv); + pool_unref(&pool); return 0; }