From: Stephan Bosch Date: Sat, 27 Jan 2018 23:10:11 +0000 (+0100) Subject: lib-smtp: server: Fix overwriting a previously submitted reply. X-Git-Tag: 2.3.1~60 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f199f594a9edd201c0e73d7a0d51903a7293feee;p=thirdparty%2Fdovecot%2Fcore.git lib-smtp: server: Fix overwriting a previously submitted reply. The submitted flag was not reset, nor was the replies_submitted counter decreased. This caused assertion failures. --- diff --git a/src/lib-smtp/smtp-server-reply.c b/src/lib-smtp/smtp-server-reply.c index 2656fd548d..2ad013ca0c 100644 --- a/src/lib-smtp/smtp-server-reply.c +++ b/src/lib-smtp/smtp-server-reply.c @@ -50,7 +50,7 @@ smtp_server_reply_debug(struct smtp_server_reply *reply, * Reply */ -static void smtp_server_reply_clear(struct smtp_server_reply *reply) +static void smtp_server_reply_destroy(struct smtp_server_reply *reply) { if (reply->command == NULL) return; @@ -62,6 +62,16 @@ static void smtp_server_reply_clear(struct smtp_server_reply *reply) str_free(&reply->content->text); } +static void smtp_server_reply_clear(struct smtp_server_reply *reply) +{ + smtp_server_reply_destroy(reply); + if (reply->submitted) { + i_assert(reply->command->replies_submitted > 0); + reply->command->replies_submitted--; + } + reply->submitted = FALSE; +} + static struct smtp_server_reply * smtp_server_reply_alloc(struct smtp_server_command *cmd, unsigned int index) { @@ -160,7 +170,7 @@ void smtp_server_reply_free(struct smtp_server_command *cmd) for (i = 0; i < cmd->replies_expected; i++) { struct smtp_server_reply *reply = array_idx_modifiable(&cmd->replies, i); - smtp_server_reply_clear(reply); + smtp_server_reply_destroy(reply); } }