mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-01-30 14:31:08 +01:00
BUG/MEDIUM: http/compression: Fix how chunked data are copied during the HTTP body parsing
When the compression is enable on HTTP responses, the chunked data are copied in a temporary buffer during the HTTP body parsing and then compressed when everything is forwarded to the client. But the amout of data that can be copied was not correctly calculated. In many cases, it worked, else on the edge when the channel buffer was almost full. [wt: bug introduced by b77c5c26 in 1.7-dev, no backport needed]
This commit is contained in:
parent
7d56c6d347
commit
06ecf3ab72
@ -177,15 +177,17 @@ comp_http_data(struct stream *s, struct filter *filter, struct http_msg *msg)
|
||||
}
|
||||
|
||||
if (msg->flags & HTTP_MSGF_TE_CHNK) {
|
||||
int block = bi_contig_data(buf);
|
||||
int block;
|
||||
|
||||
len = MIN(tmpbuf->size - buffer_len(tmpbuf), len);
|
||||
if (len > block) {
|
||||
memcpy(bi_end(tmpbuf), b_ptr(buf, *nxt), block);
|
||||
memcpy(bi_end(tmpbuf)+block, buf->data, len - block);
|
||||
}
|
||||
else
|
||||
memcpy(bi_end(tmpbuf), b_ptr(buf, *nxt), len);
|
||||
|
||||
b_adv(buf, *nxt);
|
||||
block = bi_contig_data(buf);
|
||||
memcpy(bi_end(tmpbuf), bi_ptr(buf), block);
|
||||
if (len > block)
|
||||
memcpy(bi_end(tmpbuf)+block, buf->data, len-block);
|
||||
b_rew(buf, *nxt);
|
||||
|
||||
tmpbuf->i += len;
|
||||
ret = len;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user