|
commit 032cff38c24d8359dc575423a94d19b6ad8bf848
|
|
Author: Christopher Faulet <cfaulet@haproxy.com>
|
|
Date: Mon Jun 17 11:44:47 2019 +0200
|
|
|
|
BUG/MEDIUM: h2/htx: Update data length of the HTX when the cookie list is built
|
|
|
|
When an H2 request is converted into an HTX message, All cookie headers are
|
|
grouped into one, each value separated by a semicolon (;). To do so, we add the
|
|
header "cookie" with the first value and then we update the value by appending
|
|
other cookies. But during this operation, only the size of the HTX block is
|
|
updated. And not the data length of the whole HTX message.
|
|
|
|
It is an old bug and it seems to work by chance till now. But it may lead to
|
|
undefined behaviour by time to time.
|
|
|
|
This patch must be backported to 2.0 and 1.9
|
|
|
|
(cherry picked from commit 0c6de00d7c842a682bba7586ef34fb10f69ec63c)
|
|
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
|
|
|
|
diff --git a/src/h2.c b/src/h2.c
|
|
index 9681aca5..32c1ef16 100644
|
|
--- a/src/h2.c
|
|
+++ b/src/h2.c
|
|
@@ -737,6 +737,7 @@ int h2_make_htx_request(struct http_hdr *list, struct htx *htx, unsigned int *ms
|
|
goto fail;
|
|
|
|
htx_set_blk_value_len(blk, tl);
|
|
+ htx->data += vl+2;
|
|
*(char *)(htx_get_blk_ptr(htx, blk) + bs + 0) = ';';
|
|
*(char *)(htx_get_blk_ptr(htx, blk) + bs + 1) = ' ';
|
|
memcpy(htx_get_blk_ptr(htx, blk) + bs + 2, list[ck].v.ptr, vl);
|