From 95a139b8f929e4e8aeec8d19ccc9b7587bda37e9 Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Fri, 16 Feb 2018 10:13:35 +0100 Subject: [PATCH] lib-smtp: server: STARTTLS command: Properly handle output stream flush error. --- src/lib-smtp/smtp-server-cmd-starttls.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/lib-smtp/smtp-server-cmd-starttls.c b/src/lib-smtp/smtp-server-cmd-starttls.c index 940adf50fa..0314dfafc3 100644 --- a/src/lib-smtp/smtp-server-cmd-starttls.c +++ b/src/lib-smtp/smtp-server-cmd-starttls.c @@ -70,6 +70,7 @@ static void cmd_starttls_destroy(struct smtp_server_cmd_ctx *cmd) { struct smtp_server_connection *conn = cmd->conn; struct smtp_server_command *command = cmd->cmd; + int ret; if (conn->conn.output == NULL) return; @@ -81,8 +82,12 @@ static void cmd_starttls_destroy(struct smtp_server_cmd_ctx *cmd) /* uncork */ o_stream_uncork(conn->conn.output); - if (o_stream_flush(conn->conn.output) <= 0) { + /* flush */ + if ((ret=smtp_server_connection_flush(conn)) < 0) { + return; + } else if (ret == 0) { /* the buffer has to be flushed */ + i_assert(!conn->conn.output->closed); o_stream_set_flush_callback(conn->conn.output, cmd_starttls_output, conn);