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. F
Frederic Lecaille committed
01cdc8083aecfcbf736efae31c442d3c5b02002d
Parent: 59ad7a7