From e11cd9966e23a42f608e1881674856b0d41860e6 Mon Sep 17 00:00:00 2001 From: Amaury Denoyelle Date: Tue, 12 Aug 2025 10:39:48 +0200 Subject: [PATCH] MEDIUM: quic: ensure empty packets are never built Previously, qc_do_build_pkt() had a special case when an empty packet was generated. In this case, a PADDING frame was inserted. This specific block was removed as padding support was centralized by the previous patch. However, such empty packets have no real purpose, and also are non efficient. Add a BUG_ON() to ensure that caller never invoke qc_do_build_pkt() if there is no data to emit. qc_do_build_pkt() is a tedious function which already had some issues. As such, this change is labelled as MEDIUM, as it is not 100% sure that empty packet case is never encountered during emission. --- src/quic_tx.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/quic_tx.c b/src/quic_tx.c index bfae52cd2..5452469ef 100644 --- a/src/quic_tx.c +++ b/src/quic_tx.c @@ -1937,6 +1937,9 @@ static int qc_do_build_pkt(unsigned char *pos, const unsigned char *end, dglen += 1; } + /* Caller must not try to build an empty packet. */ + BUG_ON(LIST_ISEMPTY(&frm_list) && !add_ping_frm && !ack_frm_len && !cc); + /* Handle Initial packet padding if necessary. */ if (padding && dglen < QUIC_INITIAL_PACKET_MINLEN) { padding_len = QUIC_INITIAL_PACKET_MINLEN - dglen; -- 2.47.3