BUG/MEDIUM: h1-htx: Ensure chunked parsing with full output buffer
A previous fix to ensure that there is sufficient space on the output buffer
to place parsed data (#2053) introduced an issue that if the output buffer is
filled on a chunk boundary no data is parsed but the congested flag is not set
due to the state not being H1_MSG_DATA.
The check to ensure that there is sufficient space in the output buffer is
actually already performed in all downstream functions before it is used.
This makes the early optimisation that avoids the state transition to
H1_MSG_DATA needless. Therefore, in order to allow the chunk parser to
continue in this edge case we can simply remove the early check. This
ensures that the state can progress and set the congested flag correctly
in the caller.
This patch fixes #2262. The upstream change that caused this logic error was
backported as far as 2.5, therefore it makes sense to backport this fix back
that far also.
(cherry picked from commit 3939e394796c1329a258e468d417e15957ca26a6)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
diff --git a/src/h1_htx.c b/src/h1_htx.c
index d913fe1..fbdf7d5 100644
--- a/src/h1_htx.c
+++ b/src/h1_htx.c
@@ -833,7 +833,7 @@
{
size_t sz, total = 0;
- if (b_data(srcbuf) == ofs || max <= sizeof(struct htx_blk))
+ if (b_data(srcbuf) == ofs)
return 0;
if (h1m->flags & H1_MF_CLEN) {