From: Christopher Faulet Date: Wed, 14 May 2025 07:33:46 +0000 (+0200) Subject: BUG/MEDIUM: mux-spop; Don't report a read error if there are pending data X-Git-Tag: v3.2-dev16~11 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6e46f0bf934360186aa878d75f8bf81eaae0c141;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: mux-spop; Don't report a read error if there are pending data When an read error is detected, no error must be reported on the SPOP connection is there are still some data to parse. It is important to be sure to process all data before reporting the error and be sure to not truncate received frames. However, we must also take care to handle short read case to not wait data that will never be received. This patch must be backported to 3.1. --- diff --git a/src/mux_spop.c b/src/mux_spop.c index 7b00087c7..f8acb619b 100644 --- a/src/mux_spop.c +++ b/src/mux_spop.c @@ -2381,7 +2381,8 @@ static int spop_recv(struct spop_conn *spop_conn) TRACE_DATA("received read0", SPOP_EV_SPOP_CONN_RECV, conn); spop_conn->flags |= SPOP_CF_RCVD_SHUT; } - if (conn->flags & CO_FL_ERROR) { + if ((conn->flags & CO_FL_ERROR) && + (!b_data(&spop_conn->dbuf) || (spop_conn->flags & SPOP_CF_DEM_SHORT_READ))) { TRACE_DATA("connection error", SPOP_EV_SPOP_CONN_RECV, conn); spop_conn->flags |= SPOP_CF_ERROR; }