]> git.kaiwu.me - haproxy.git/commit
BUG/MINOR: qpack: encoder and decoder stream data is never consumed
authorFrederic Lecaille <flecaille@haproxy.com>
Tue, 1 Sep 2026 14:57:42 +0000 (16:57 +0200)
committerFrederic Lecaille <flecaille@haproxy.com>
Wed, 2 Sep 2026 13:32:32 +0000 (15:32 +0200)
commit01cdc8083aecfcbf736efae31c442d3c5b02002d
tree50081ac096b36563cf07ea0b91a194f3b46acc41
parent59ad7a7c09e1aa31b782bf9f584768b4fd1cd04b
BUG/MINOR: qpack: encoder and decoder stream data is never consumed

qpack_decode_enc() and qpack_decode_dec() always return 0, which
h3_parse_uni_stream_no_h3() propagates as a consumed byte count. qcs_consume()
is thus never called: the data stays in the Rx buffer and the flow control
credit is never released, so both QPACK unidirectional streams stall for good on
the first byte the peer sends. On the encoder stream that byte is 0x20, which a
conformant peer sends to announce a null dynamic table capacity.

Report the number of consumed bytes instead, and skip the stream ID of Section
Acknowledgment and Stream Cancellation, which haproxy has no use for. The Insert
Count Increment test only caught 0x00 to 0x0f and now covers its whole range.
The encoder stream insert instructions are rejected, as haproxy advertises a
null dynamic table capacity.

This bug was introduced by commit b4672fb6f ("MINOR: qpack: Add QPACK
compression").

This should be backported as far as 2.6.
src/h3.c
src/qpack-dec.c