From 28fede787bddc73f964134ff8871ac3094f3729f Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Mon, 18 Dec 2017 16:45:23 +0100 Subject: [PATCH] lib-smtp: server: Fixed assertion in smtp_server_connection_next_reply() checking whether command is fully replied. It did not handle LMTP DATA/BDAT command correctly, for which there can be multiple replies. This fixes mixing local/remote recipients in LMTP, which used to crash: Panic: file smtp-server-connection.c: line 610 (smtp_server_connection_next_reply): assertion failed: (cmd->state == SMTP_SERVER_COMMAND_STATE_READY_TO_REPLY && smtp_server_command_is_replied(cmd)) --- src/lib-smtp/smtp-server-connection.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/lib-smtp/smtp-server-connection.c b/src/lib-smtp/smtp-server-connection.c index 6f871714d3..5c9583a1f6 100644 --- a/src/lib-smtp/smtp-server-connection.c +++ b/src/lib-smtp/smtp-server-connection.c @@ -609,7 +609,7 @@ smtp_server_connection_next_reply(struct smtp_server_connection *conn) } i_assert(cmd->state == SMTP_SERVER_COMMAND_STATE_READY_TO_REPLY && - smtp_server_command_is_replied(cmd)); + array_is_created(&cmd->replies)); smtp_server_command_completed(cmd); @@ -619,8 +619,6 @@ smtp_server_connection_next_reply(struct smtp_server_connection *conn) for (i = 0; i < cmd->replies_expected; i++) { struct smtp_server_reply *reply; - if (!array_is_created(&cmd->replies)) - break; reply = array_idx_modifiable(&cmd->replies, i); if (!reply->submitted) {