diff --git a/src/h3.c b/src/h3.c index 42289c0a5..94b50ba90 100644 --- a/src/h3.c +++ b/src/h3.c @@ -1095,7 +1095,7 @@ static ssize_t h3_decode_qcs(struct qcs *qcs, struct buffer *b, int fin) /* Check that content-length is not exceeded on a new DATA frame. */ if (ftype == H3_FT_DATA) { h3s->data_len += flen; - if (h3s->flags & H3_SF_HAVE_CLEN && h3_check_body_size(qcs, fin)) + if (h3s->flags & H3_SF_HAVE_CLEN && h3_check_body_size(qcs, (fin && flen == b_data(b)))) break; } @@ -1130,12 +1130,12 @@ static ssize_t h3_decode_qcs(struct qcs *qcs, struct buffer *b, int fin) break; } - /* Check content-length equality with DATA frames length on the last frame. */ - if (fin && h3s->flags & H3_SF_HAVE_CLEN && h3_check_body_size(qcs, fin)) - break; - last_stream_frame = (fin && flen == b_data(b)); + /* Check content-length equality with DATA frames length on the last frame. */ + if (last_stream_frame && h3s->flags & H3_SF_HAVE_CLEN && h3_check_body_size(qcs, last_stream_frame)) + break; + h3_inc_frame_type_cnt(h3c->prx_counters, ftype); switch (ftype) { case H3_FT_DATA: