]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: h1-htx: Remove flags about protocol upgrade on non-101 responses
authorChristopher Faulet <cfaulet@haproxy.com>
Tue, 10 Jan 2023 17:51:55 +0000 (18:51 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Wed, 11 Jan 2023 09:31:28 +0000 (10:31 +0100)
It is possible to have an "upgrade:" header and the corresponding value in
the "connection:" header for a non-101 response. It happens for
426-Upgrade-Required messages. However, on HAProxy side, a parsing error is
reported for this kind of message because no websocket key header
("sec-websocket-accept:") is found in the response.

So a possible fix could be to not perform this test for non-101
responses. However, having flags about protocol upgrade on this kind of
response could lead to other bugs. Instead, corresponding flags are
removed. Thus, during the H1 response post-parsing, H1_MF_CONN_UPG and
H1_MF_UPG_WEBSOCKET flags are removed from any non-101 response.

This patch should fix the issue #1997. It must be backported as far as 2.4.

src/h1_htx.c

index 75f9dca9d3b2ab5c2e350124c1319f50dafbafd5..1b79584a3f4c8ea800ca6df36e67d1493a70c96c 100644 (file)
@@ -279,6 +279,9 @@ static int h1_postparse_res_hdrs(struct h1m *h1m, union h1_sl *h1sl, struct htx
                goto output_full;
        }
 
+       if ((h1m->flags & (H1_MF_CONN_UPG|H1_MF_UPG_WEBSOCKET)) && code != 101)
+               h1m->flags &= ~(H1_MF_CONN_UPG|H1_MF_UPG_WEBSOCKET);
+
        if (((h1m->flags & H1_MF_METH_CONNECT) && code >= 200 && code < 300) || code == 101) {
                h1m->flags &= ~(H1_MF_CLEN|H1_MF_CHNK);
                h1m->flags |= H1_MF_XFER_LEN;