From b57de07a210fd9f9d6f1f7c716a77c157455b90c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20L=C3=A9caille?= Date: Mon, 2 May 2022 18:58:27 +0200 Subject: [PATCH] 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. --- src/mux_quic.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/mux_quic.c b/src/mux_quic.c index e129df818..d5f448ca5 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;