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.
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;
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 */