BUG/MEDIUM: htx: Adjust length to add DATA block in an empty HTX buffer
htx_add_data() is able to partially consume data. However there is a bug
when the HTX buffer is empty. The data length is not properly
adjusted. Thus, if it exceeds the HTX buffer size, no block is added. To fix
the issue, the length is now adjusted first.
This patch must be backported as far as 2.0.
(cherry picked from commit 28e7ba86885d60a29036bc6fa3a89777148a3762)
Signed-off-by: Willy Tarreau <w@1wt.eu>
(cherry picked from commit 23acffa0f4d4588b0d09c3e8852570bd8c20a0ea)
Signed-off-by: Willy Tarreau <w@1wt.eu>
diff --git a/src/htx.c b/src/htx.c
index 8c6e368..588aa6c 100644
--- a/src/htx.c
+++ b/src/htx.c
@@ -936,9 +936,6 @@
uint32_t sz, room;
int32_t len = data.len;
- if (htx->head == -1)
- goto add_new_block;
-
/* Not enough space to store data */
if (len > htx_free_data_space(htx))
len = htx_free_data_space(htx);
@@ -946,6 +943,9 @@
if (!len)
return 0;
+ if (htx->head == -1)
+ goto add_new_block;
+
/* get the tail and head block */
tailblk = htx_get_tail_blk(htx);
if (tailblk == NULL)