From f8a1279e745d0553c73fb472aa2cbdabf641bf9d Mon Sep 17 00:00:00 2001 From: senza1dio-design Date: Tue, 25 Nov 2025 11:44:58 +0100 Subject: [PATCH] QUIC: handle ACK_ECN frames (fixes #945) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The QUIC frame dispatcher was missing the case for ACK_ECN frames (type 0x03), causing connections to be closed with "missing frame handler" error when clients send ECN counts. RFC 9000 ยง19.3 requires implementations to handle both ACK (0x02) and ACK_ECN (0x03) frame types. Since ngx_quic_handle_ack_frame() already correctly processes both types, adding the case statement is sufficient to fix the issue. Identified and fixed through AI-orchestrated development: bug identified by need2talk.it founder, root cause analysis and fix implementation by Claude Code (Anthropic). Tested in production on https://need2talk.it with HTTP/3 enabled. The fix follows the same approach as Cloudflare quiche #1053. --- src/event/quic/ngx_event_quic.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/event/quic/ngx_event_quic.c b/src/event/quic/ngx_event_quic.c index 6a59aaf93..fc7e82320 100644 --- a/src/event/quic/ngx_event_quic.c +++ b/src/event/quic/ngx_event_quic.c @@ -1231,6 +1231,7 @@ ngx_quic_handle_frames(ngx_connection_t *c, ngx_quic_header_t *pkt) switch (frame.type) { case NGX_QUIC_FT_ACK: + case NGX_QUIC_FT_ACK_ECN: if (ngx_quic_handle_ack_frame(c, pkt, &frame) != NGX_OK) { return NGX_ERROR; }