From: Timo Sirainen Date: Fri, 1 Jul 2016 08:41:51 +0000 (+0300) Subject: dict-client: If commit fails to send BEGIN, don't try sending anything else. X-Git-Tag: 2.3.0.rc1~3353 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e13bef0a49ee60e4886967b331a7f7d5c96377cc;p=thirdparty%2Fdovecot%2Fcore.git dict-client: If commit fails to send BEGIN, don't try sending anything else. Fixes memory leak and also fixes overwriting the original error message. --- diff --git a/src/lib-dict/dict-client.c b/src/lib-dict/dict-client.c index 5d37983f49..7a7002c8ad 100644 --- a/src/lib-dict/dict-client.c +++ b/src/lib-dict/dict-client.c @@ -259,7 +259,7 @@ client_dict_cmd_send(struct client_dict *dict, struct client_dict_cmd **_cmd, } } -static void +static bool client_dict_transaction_send_begin(struct client_dict_transaction_context *ctx) { struct client_dict *dict = (struct client_dict *)ctx->ctx.dict; @@ -275,8 +275,11 @@ client_dict_transaction_send_begin(struct client_dict_transaction_context *ctx) cmd = client_dict_cmd_init(dict, query); cmd->no_replies = TRUE; cmd->retry_errors = TRUE; - if (!client_dict_cmd_send(dict, &cmd, &error)) + if (!client_dict_cmd_send(dict, &cmd, &error)) { ctx->error = i_strdup(error); + return FALSE; + } + return TRUE; } static void @@ -290,8 +293,10 @@ client_dict_send_transaction_query(struct client_dict_transaction_context *ctx, if (ctx->error != NULL) return; - if (!ctx->sent_begin) - client_dict_transaction_send_begin(ctx); + if (!ctx->sent_begin) { + if (!client_dict_transaction_send_begin(ctx)) + return; + } cmd = client_dict_cmd_init(dict, query); cmd->no_replies = TRUE;