BUG/MINOR: mux-quic: handle closure of uni-stream
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Fri, 3 Jan 2025 15:25:14 +0000 (16:25 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Wed, 19 Feb 2025 12:08:33 +0000 (13:08 +0100)
commitb19d01a8a0a0137a9f48084877f03f8a06b34bbf
tree0ead3a4e6f4bc6523d800eff7fb6ad77014dfa27
parent9c7c7419437f0ccbe9cb2d146996c5a7682ce20f
BUG/MINOR: mux-quic: handle closure of uni-stream

This commit is a direct follow-up to the previous one. As already
described, a previous fix was merged to prevent streamdesc attach
operation on already completed QCS instances scheduled for purging. This
was implemented by skipping app proto decoding.

However, this has a bad side-effect for remote uni-directional stream.
If receiving a FIN stream frame on such a stream, it will considered as
complete because streamdesc are never attached to a uni stream. Due to
the mentionned new fix, this prevent analysis of this last frame for
every uni stream.

To fix this, do not skip anymore app proto decoding for completed QCS.
Update instead qcs_attach_sc() to transform it as a noop function if QCS
is already fully closed before streamdesc instantiation. However,
success return value is still used to prevent an invalid decoding error
report.

The impact of this bug should be minor. Indeed, HTTP3 and QPACK uni
streams are never closed by the client as this is invalid due to the
spec. The only issue was that this prevented QUIC MUX to close the
connection with error H3_ERR_CLOSED_CRITICAL_STREAM.

This must be backported along the previous patch, at least to 3.1, and
eventually to 2.8 if mentionned patches are merged there.

(cherry picked from commit 801e39e1ccfc7404354d6870e779f83351593df0)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit 85e3bf658163d97fd09ac63f6c997d230d32729b)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
src/h3.c
src/mux_quic.c