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.
This commit is contained in:
Christopher Faulet 2021-06-09 17:04:37 +02:00
parent 86ca0e52f7
commit 402740c3ad

View File

@ -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 */