From: Christopher Faulet Date: Wed, 1 Jul 2026 13:45:10 +0000 (+0200) Subject: BUG/MINOR: mux-quic: Fix handling EOM after in qcs_http_rcv_buf() X-Git-Url: http://git.kaiwu.me/postgresql/log/contrib/postgres_fdw/hash.html?a=commitdiff_plain;h=e237b4ff9fa4190f79165b58991e82e3dec77d3a;p=haproxy.git BUG/MINOR: mux-quic: Fix handling EOM after in qcs_http_rcv_buf() In qcs_http_rcv_buf() function, when the buffers cannot be swapped and htx_xfer() function is called, the way the EOM flag is handled is buggy. The htx_xfer() function is responsible to tranfer HTX flags from the QCS message to the CS one. And when it is performed, HTX flags of the original message are reset. So, the following test on the EOM flag when the QCS message is empty is never true. Because of this bug, QC_SF_EOI_SUSPENDED flag is never tested on this code path and variable is not set to 1 as expected. To fix the issue, we must test the EOM flag on the CS message. This patch must be backported to 3.4. --- diff --git a/src/qcm_http.c b/src/qcm_http.c index f028cb992..1593d428e 100644 --- a/src/qcm_http.c +++ b/src/qcm_http.c @@ -47,9 +47,8 @@ size_t qcs_http_rcv_buf(struct qcs *qcs, struct buffer *buf, size_t count, htx_xfer(cs_htx, qcs_htx, count, HTX_XFER_DEFAULT); BUG_ON(qcs_htx->flags & HTX_FL_PARSING_ERROR); - /* Copy EOM from src to dst buffer if all data copied. */ - if (htx_is_empty(qcs_htx) && (qcs_htx->flags & HTX_FL_EOM)) { - cs_htx->flags |= HTX_FL_EOM; + /* EOM was copied to cs_htx if all data were copied. */ + if (cs_htx->flags & HTX_FL_EOM) { if (!(qcs->flags & QC_SF_EOI_SUSPENDED)) *fin = 1; }