MEDIUM: quic: do not ACK packet with STREAM if MUX not present
If a packet contains a STREAM frame but the MUX is not allocated, the
frame cannot be enqueued. According to the RFC9000, we must not
acknowledge the packet under this condition.
This may prevents a bug with firefox which keeps trying on refreshing
the web page. This issue has already been detected before closing state
implementation : haproxy wasn't emitted CONNECTION_CLOSE and keeps
acknowledge STREAM frames despite not handle them.
In the future, it might be necessary to respond with a CONNECTION_CLOSE
if the MUX has already been freed.
diff --git a/src/xprt_quic.c b/src/xprt_quic.c
index 15bcd38..844aa13 100644
--- a/src/xprt_quic.c
+++ b/src/xprt_quic.c
@@ -2738,9 +2738,12 @@
} else if (!(stream->id & QUIC_STREAM_FRAME_ID_INITIATOR_BIT))
goto err;
- /* At the application layer the connection may have already been closed. */
+ /* The upper layer may not be allocated.
+ *
+ * TODO emit a CONNECTION_CLOSE if mux already freed.
+ */
if (qc->mux_state != QC_MUX_READY)
- break;
+ goto err;
if (!qc_handle_strm_frm(pkt, stream, qc))
goto err;