]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: http-ana: Disable fast-fwd for unfinished req waiting for upgrade
authorChristopher Faulet <cfaulet@haproxy.com>
Wed, 2 Oct 2024 07:57:34 +0000 (09:57 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Wed, 2 Oct 2024 08:31:40 +0000 (10:31 +0200)
If a request is waiting for a protocol upgrade but it is not finished, the
data fast-forwarding is disabled. Otherwise, the request analyzers will miss
the end of the message.

This case is possible since the commit 01fb1a54 ("BUG/MEDIUM: mux-h1/mux-h2:
Reject upgrades with payload on H2 side only"). Indeed, before, a protocol
upgrade was not allowed for request with payload. But it is now possible and
this comes with a side-effect. It is not really satisfying but for now there
is no other way to sync the muxes and the applicative stream. It seems to be
a reasonnable fix for now, waiting for a deeper refactoring.

This patch must be backported with the commit above.

src/http_ana.c

index d132e5de26eb4992658bb9824c9602619ea9cec4..cc7fc70005754051c0d9931fd20f201e4d455d4a 100644 (file)
@@ -956,7 +956,8 @@ int http_request_forward_body(struct stream *s, struct channel *req, int an_bit)
        }
        else {
                c_adv(req, htx->data - co_data(req));
-               if ((global.tune.options & GTUNE_USE_FAST_FWD) && (msg->flags & HTTP_MSGF_XFER_LEN))
+               if ((global.tune.options & GTUNE_USE_FAST_FWD) && (msg->flags & HTTP_MSGF_XFER_LEN) &&
+                   (!(msg->flags & HTTP_MSGF_CONN_UPG) || (htx->flags & HTX_FL_EOM)))
                        channel_htx_forward_forever(req, htx);
        }