BUG/MEDIUM: mux-h2: make sure to always report pending errors to the stream
Some checks are pending
Contrib / build (push) Waiting to run
alpine/musl / gcc (push) Waiting to run
VTest / Generate Build Matrix (push) Waiting to run
VTest / (push) Blocked by required conditions
Windows / Windows, gcc, all features (push) Waiting to run

Some stream parsing errors that do not affect the connection result in
the parsed block not being transferred from the rx buffer to the channel
and not being reported upstream in rcv_buf(), causing the stconn to time
out. Let's detect this condition, and propagate term flags anyway since
no more progress will be made otherwise.

This should be backported at least till 3.2, probably even 2.8.
This commit is contained in:
Willy Tarreau 2026-02-26 00:18:44 +01:00
parent e67e36c9eb
commit 44932b6c41

View file

@ -7884,7 +7884,13 @@ static size_t h2_rcv_buf(struct stconn *sc, struct buffer *buf, size_t count, in
/* tell the stream layer whether there are data left or not */
if (h2s_rxbuf_cnt(h2s)) {
/* Note that parsing errors can also arrive here, we may need
* to propagate errors upstream otherwise no new activity will
* unblock them.
*/
se_fl_set(h2s->sd, SE_FL_RCV_MORE | SE_FL_WANT_ROOM);
if (h2s_htx && h2s_htx->flags & HTX_FL_PARSING_ERROR)
h2s_propagate_term_flags(h2c, h2s);
BUG_ON_HOT(!buf->data);
}
else {