From 729b2ee4553283bc3a38f5516be2158df4f10501 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Fri, 6 Nov 2020 09:33:36 +0100 Subject: [PATCH] BUG/MINOR: http-htx: Just warn if payload of an errorfile doesn't match the C-L During startup, when an errorfile is parsed, if its payload does not match the announced content-length, an error is triggered. This change was introduced in the 2.3, which is ok. But for a stable release it may be seen as a regression. Thus, now a warning is emitted, instead of an error. And the content-length header is updated with the real payload length. This patch depends on 58f55acf4e ("MINOR: http-htx: Add understandable errors for the errorfiles parsing"). Both must be backported as far as 2.0. This bug only exists in the 2.2, 2.1 and 2.0. Thus, there is no upstream commit ID for this patch. (cherry picked from commit 7bf3d81d3cf4b9f4587cee061c2ef4a533125002) Signed-off-by: Christopher Faulet --- src/http_htx.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/http_htx.c b/src/http_htx.c index 8158395..06ccd8d 100644 --- a/src/http_htx.c +++ b/src/http_htx.c @@ -833,9 +833,17 @@ int http_str_to_htx(struct buffer *buf, struct ist raw, char **errmsg) goto error; } if ((flags & HTX_SL_F_CLEN) && h1m.body_len != (raw.len - ret)) { - memprintf(errmsg, "payload size does not match the announced content-length (%lu != %lu)", + struct ist clen = ist(ultoa(raw.len - ret)); + int i; + + memprintf(errmsg, "payload size does not match the announced content-length (%lu != %lu)." + " C-L header is updated accordingly but it should be fixed to avoid any errors on future versions.", (raw.len - ret), h1m.body_len); - goto error; + + for (i = 0; hdrs[i].n.len; i++) { + if (isteqi(hdrs[i].n, ist("content-length"))) + hdrs[i].v = clen; + } } htx = htx_from_buf(buf); -- 1.7.10.4