BUG/MINOR: fcgi: Don't set the status to 302 if it is already set
authorChristopher Faulet <cfaulet@haproxy.com>
Mon, 17 Feb 2025 15:37:47 +0000 (16:37 +0100)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Tue, 18 Mar 2025 14:50:54 +0000 (15:50 +0100)
When a "Location" header was found in a FCGI response, the status code was
forced to 302. But it should only be performed if no status code was set
first.

So now, we take care to not override an already defined status code when the
"Location" header is found.

This patch should fix the issue #2865. It must backported to all stable
versions.

(cherry picked from commit ca79ed5eefaa65fc82e1a8c1ec4308eaaadaebd1)
Signed-off-by: Willy Tarreau <w@1wt.eu>
(cherry picked from commit 870bbce00c8fc1be660499a943f81dd26530a82b)
Signed-off-by: Amaury Denoyelle <adenoyelle@haproxy.com>

src/h1_htx.c

index 8d8aeee..4b98a39 100644 (file)
@@ -272,7 +272,7 @@ static int h1_postparse_res_hdrs(struct h1m *h1m, union h1_sl *h1sl, struct htx
                        if (isteqi(hdrs[hdr].n, ist("status"))) {
                                code = http_parse_status_val(hdrs[hdr].v, &status, &reason);
                        }
-                       else if (isteqi(hdrs[hdr].n, ist("location"))) {
+                       else if (isteqi(hdrs[hdr].n, ist("location")) && !code) {
                                code = 302;
                                status = ist("302");
                                reason = ist("Found");