]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: h3: Set HTX flags corresponding to the scheme found in the request
authorChristopher Faulet <cfaulet@haproxy.com>
Mon, 26 May 2025 09:28:04 +0000 (11:28 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Mon, 26 May 2025 09:38:29 +0000 (11:38 +0200)
When a ":scheme" pseudo-header is found in a h3 request, the
HTX_SL_F_HAS_SCHM flag must be set on the HTX message. And if the scheme is
'http' or 'https', the corresponding HTX flag must also be set. So,
respectively, HTX_SL_F_SCHM_HTTP or HTX_SL_F_SCHM_HTTPS.

It is mainly used to send the right ":scheme" pseudo-header value to H2
server on backend side.

This patch could be backported as far as 2.6.

src/h3.c

index 81ab90c69bd67ad0374668b8471e9fcb871414e6..ac2a116dd9badb04715276a172f2c048ddc866f3 100644 (file)
--- a/src/h3.c
+++ b/src/h3.c
@@ -679,7 +679,12 @@ static ssize_t h3_headers_to_htx(struct qcs *qcs, const struct buffer *buf,
                                goto out;
                        }
 
-                       if (!http_validate_scheme(list[hdr_idx].v)) {
+                       flags |= HTX_SL_F_HAS_SCHM;
+                       if (isteqi(list[hdr_idx].v, ist("http")))
+                               flags |= HTX_SL_F_SCHM_HTTP;
+                       else if (isteqi(list[hdr_idx].v, ist("https")))
+                               flags |= HTX_SL_F_SCHM_HTTPS;
+                       else if (!http_validate_scheme(list[hdr_idx].v)) {
                                TRACE_ERROR("invalid scheme pseudo-header", H3_EV_RX_FRAME|H3_EV_RX_HDR, qcs->qcc->conn, qcs);
                                h3s->err = H3_ERR_MESSAGE_ERROR;
                                qcc_report_glitch(h3c->qcc, 1);