]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: smtp-server-connection - Fix reading remaining payload of failed (DATA...
authorStephan Bosch <stephan.bosch@open-xchange.com>
Tue, 11 Nov 2025 00:24:38 +0000 (01:24 +0100)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Tue, 11 Nov 2025 21:41:43 +0000 (21:41 +0000)
src/lib-smtp/smtp-server-connection.c

index 340dfe90c857f51a4cb3bed281f20b8b28f2623a..d1dc62819f9d164d46f80506d3e38bf194180df7 100644 (file)
@@ -529,7 +529,10 @@ smtp_server_connection_handle_input(struct smtp_server_connection *conn,
                        if (conn->closing)
                                break;
 
-                       if (!smtp_server_connection_check_pipeline(conn)) {
+                       if (!smtp_server_connection_check_pipeline(conn))
+                               pipeline_blocked = TRUE;
+                       if (pipeline_blocked &&
+                           !smtp_command_parser_pending_data(conn->smtp_parser)) {
                                smtp_server_connection_input_halt(conn);
                                return;
                        }
@@ -603,7 +606,7 @@ smtp_server_connection_handle_input(struct smtp_server_connection *conn,
 
                if (conn->disconnected)
                        return;
-               if (conn->input_broken || conn->closing || pipeline_blocked) {
+               if (conn->input_broken || conn->closing) {
                        smtp_server_connection_input_halt(conn);
                        return;
                }
@@ -614,6 +617,12 @@ smtp_server_connection_handle_input(struct smtp_server_connection *conn,
                           reply */
                        smtp_server_command_ready_to_reply(pending_command);
                }
+
+               if (pipeline_blocked &&
+                   !smtp_command_parser_pending_data(conn->smtp_parser)) {
+                       smtp_server_connection_input_halt(conn);
+                       return;
+               }
        }
 }