BUG/MINOR: http-htx: Just warn if payload of an errorfile doesn't match the C-L
authorChristopher Faulet <cfaulet@haproxy.com>
Fri, 6 Nov 2020 08:33:36 +0000 (09:33 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 6 Nov 2020 09:00:32 +0000 (10:00 +0100)
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 <cfaulet@haproxy.com>

src/http_htx.c

index 8158395..06ccd8d 100644 (file)
@@ -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);