From: Christopher Faulet Date: Wed, 9 Jun 2021 15:04:37 +0000 (+0200) Subject: BUG/MEDIUM: compression: Properly get the next block to iterate on payload X-Git-Tag: v2.5-dev1~175 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=402740c3ad9bc0d294d0c161e4904c06396a0791;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: compression: Properly get the next block to iterate on payload When a DATA block is compressed, or when the compression context is finished on a TLR/EOT block, the next block used to loop on the HTX message must be refreshed because a defragmentation may have occurred. This bug was introduced when the EOM block was removed in 2.4. Thus, this patch must be backported to 2.4. --- diff --git a/src/flt_http_comp.c b/src/flt_http_comp.c index ba64877274..e7bfa6d5f9 100644 --- a/src/flt_http_comp.c +++ b/src/flt_http_comp.c @@ -206,8 +206,10 @@ comp_http_payload(struct stream *s, struct filter *filter, struct http_msg *msg, if (ret == sz && !b_data(&trash)) next = htx_remove_blk(htx, blk); - else + else { blk = htx_replace_blk_value(htx, blk, v, ist2(b_head(&trash), b_data(&trash))); + next = htx_get_next_blk(htx, blk); + } len -= ret; consumed += ret; @@ -225,6 +227,7 @@ comp_http_payload(struct stream *s, struct filter *filter, struct http_msg *msg, blk = htx_get_next_blk(htx, last); if (!blk) goto error; + next = htx_get_next_blk(htx, blk); to_forward += b_data(&trash); } /* fall through */