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 ba64877..e7bfa6d 100644
--- a/src/flt_http_comp.c
+++ b/src/flt_http_comp.c
@@ -206,8 +206,10 @@
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 @@
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 */