From: Olivier Houchard Date: Fri, 14 Dec 2018 15:28:08 +0000 (+0100) Subject: BUG/MEDIUM: htx: When performing zero-copy, start from the right offset. X-Git-Tag: v1.9-dev11~33 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=84cca66;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: htx: When performing zero-copy, start from the right offset. When using zerocopy, start from the beginning of the data, not from the beginning of the buffer, it may have contained headers, and so the data won't start at the beginning of the buffer. --- diff --git a/src/mux_h1.c b/src/mux_h1.c index a20e29a32a..32004c68c4 100644 --- a/src/mux_h1.c +++ b/src/mux_h1.c @@ -1404,7 +1404,7 @@ static size_t h1_process_output(struct h1c *h1c, struct buffer *buf, size_t coun * the HTX blocks. */ if (!b_data(&h1c->obuf)) { - h1c->obuf.head = sizeof(struct htx); + h1c->obuf.head = sizeof(struct htx) + blk->addr; if (chn_htx->used == 1 && blk && htx_get_blk_type(blk) == HTX_BLK_DATA && diff --git a/src/mux_h2.c b/src/mux_h2.c index 4ca0907b6c..d13bd95823 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -4335,7 +4335,7 @@ static size_t h2s_htx_frt_make_resp_data(struct h2s *h2s, struct buffer *buf, si * frame header there. */ h2c->mbuf.area = buf->area; - h2c->mbuf.head = sizeof(struct htx) - 9; + h2c->mbuf.head = sizeof(struct htx) + blk->addr - 9; h2c->mbuf.data = fsize + 9; outbuf.area = b_head(&h2c->mbuf);