From: Frédéric Lécaille Date: Mon, 2 May 2022 16:58:27 +0000 (+0200) Subject: BUG/MINOR: mux_quic: Dropped packet upon retransmission for closed streams X-Git-Tag: v2.6-dev9~111 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b57de07a210fd9f9d6f1f7c716a77c157455b90c;p=thirdparty%2Fhaproxy.git BUG/MINOR: mux_quic: Dropped packet upon retransmission for closed streams We rely on the largest ID which was used to open streams to know if the stream we received STREAM frames for is closed or not. If closed, we return the same status as the one for a STREAM frame which was a already received one for on open stream. --- diff --git a/src/mux_quic.c b/src/mux_quic.c index e129df818a..d5f448ca5e 100644 --- a/src/mux_quic.c +++ b/src/mux_quic.c @@ -363,8 +363,14 @@ int qcc_recv(struct qcc *qcc, uint64_t id, uint64_t len, uint64_t offset, qcs = qcc_get_qcs(qcc, id); if (!qcs) { - TRACE_DEVEL("leaving on stream not found", QMUX_EV_QCC_RECV|QMUX_EV_QCC_NQCS, qcc->conn, NULL, &id); - return 1; + if ((id >> QCS_ID_TYPE_SHIFT) <= qcc->strms[qcs_id_type(id)].largest_id) { + TRACE_DEVEL("already released stream", QMUX_EV_QCC_RECV|QMUX_EV_QCC_NQCS, qcc->conn, NULL, &id); + return 0; + } + else { + TRACE_DEVEL("leaving on stream not found", QMUX_EV_QCC_RECV|QMUX_EV_QCC_NQCS, qcc->conn, NULL, &id); + return 1; + } } *out_qcs = qcs;