Mercurial > dovecot > core-2.2
changeset 19807:b0bdbb90ec7f
doveadm: Fixed memory leaks when ver2 command parsing fails with invalid parameter.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Mon, 22 Feb 2016 18:42:10 +0200 |
parents | c943b68cda91 |
children | 5e70b4f48909 |
files | src/doveadm/doveadm-mail.c |
diffstat | 1 files changed, 9 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/doveadm/doveadm-mail.c Mon Feb 22 13:59:14 2016 +0200 +++ b/src/doveadm/doveadm-mail.c Mon Feb 22 18:42:10 2016 +0200 @@ -596,12 +596,16 @@ /* service deinit unloads mail plugins, so do it late */ mail_storage_service_deinit(&ctx->storage_service); + if (ctx->exit_code != 0) + doveadm_exit_code = ctx->exit_code; +} + +static void doveadm_mail_cmd_free(struct doveadm_mail_cmd_context *ctx) +{ if (ctx->users_list_input != NULL) i_stream_unref(&ctx->users_list_input); if (ctx->cmd_input != NULL) i_stream_unref(&ctx->cmd_input); - if (ctx->exit_code != 0) - doveadm_exit_code = ctx->exit_code; pool_unref(&ctx->pool); } @@ -662,6 +666,7 @@ } ctx->args = (const void *)argv; doveadm_mail_cmd_exec(ctx, wildcard_user); + doveadm_mail_cmd_free(ctx); } static bool @@ -939,6 +944,7 @@ } else { doveadm_exit_code = EX_USAGE; i_error("invalid parameter: %s", argv[i].name); + doveadm_mail_cmd_free(ctx); return -1; } } @@ -948,5 +954,6 @@ ctx->full_args = ctx->args; doveadm_mail_cmd_exec(ctx, wildcard_user); + doveadm_mail_cmd_free(ctx); return 0; }