]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Merge branch 'jk/redact-h2h3-headers-fix'
authorJunio C Hamano <gitster@pobox.com>
Sat, 23 Sep 2023 00:01:36 +0000 (17:01 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sat, 23 Sep 2023 00:01:36 +0000 (17:01 -0700)
HTTP Header redaction code has been adjusted for a newer version of
cURL library that shows its traces differently from earlier
versions.

* jk/redact-h2h3-headers-fix:
  http: update curl http/2 info matching for curl 8.3.0
  http: factor out matching of curl http/2 trace lines

http.c

diff --git a/http.c b/http.c
index e138b4b96fb9e201623339eada35f9499b5ba371..8f71bf00d8998af44e177a86d73dbc86872c9726 100644 (file)
--- a/http.c
+++ b/http.c
@@ -738,18 +738,43 @@ static int redact_sensitive_header(struct strbuf *header, size_t offset)
        return ret;
 }
 
+static int match_curl_h2_trace(const char *line, const char **out)
+{
+       const char *p;
+
+       /*
+        * curl prior to 8.1.0 gives us:
+        *
+        *     h2h3 [<header-name>: <header-val>]
+        *
+        * Starting in 8.1.0, the first token became just "h2".
+        */
+       if (skip_iprefix(line, "h2h3 [", out) ||
+           skip_iprefix(line, "h2 [", out))
+               return 1;
+
+       /*
+        * curl 8.3.0 uses:
+        *   [HTTP/2] [<stream-id>] [<header-name>: <header-val>]
+        * where <stream-id> is numeric.
+        */
+       if (skip_iprefix(line, "[HTTP/2] [", &p)) {
+               while (isdigit(*p))
+                       p++;
+               if (skip_prefix(p, "] [", out))
+                       return 1;
+       }
+
+       return 0;
+}
+
 /* Redact headers in info */
 static void redact_sensitive_info_header(struct strbuf *header)
 {
        const char *sensitive_header;
 
-       /*
-        * curl's h2h3 prints headers in info, e.g.:
-        *   h2h3 [<header-name>: <header-val>]
-        */
        if (trace_curl_redact &&
-           (skip_iprefix(header->buf, "h2h3 [", &sensitive_header) ||
-            skip_iprefix(header->buf, "h2 [", &sensitive_header))) {
+           match_curl_h2_trace(header->buf, &sensitive_header)) {
                if (redact_sensitive_header(header, sensitive_header - header->buf)) {
                        /* redaction ate our closing bracket */
                        strbuf_addch(header, ']');