From 1fdfa4f9ba047aad76e1c7b4e894edf966f0a724 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Mon, 16 Oct 2023 19:30:02 +0200 Subject: [PATCH] BUG/MEDIUM: mux-h2: Don't report an error on shutr if a shutw is pending If a shutw is blocked because the mux is full or busy, we must defer the shutr. In this case, the H2 stream is not in H2_SS_CLOSED state because the shutw is also deferred. If the shutr is performed, this will lead to a error. Concretly, when the mux is unblocked, a RST_STREAM is sent while in some cases, an empty DATA frame with ES flag set could be sent. This patch should be backported to all stable versions. --- src/mux_h2.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/mux_h2.c b/src/mux_h2.c index 67501738d..a8f7792e9 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -4663,6 +4663,9 @@ static void h2_do_shutr(struct h2s *h2s) TRACE_ENTER(H2_EV_STRM_SHUT, h2c->conn, h2s); + if (h2s->flags & H2_SF_WANT_SHUTW) + goto add_to_list; + /* a connstream may require us to immediately kill the whole connection * for example because of a "tcp-request content reject" rule that is * normally used to limit abuse. In this case we schedule a goaway to