Skip to content

Commit

Permalink
Backport fix for t5559.{18,19,39} (git-for-windows#4614)
Browse files Browse the repository at this point in the history
HTTP Header redaction code has been adjusted for a newer version of cURL
library that shows its traces differently from earlier versions.

This is purely a fix for Git's test suite, no Git behavior is actually
changed by this PR, read: it has no user-visible changes.

This PR is a close relative of
microsoft#609.
  • Loading branch information
dscho authored Sep 22, 2023
2 parents 49f75ff + 0763c3a commit 49aad3c
Showing 1 changed file with 31 additions and 6 deletions.
37 changes: 31 additions & 6 deletions http.c
Original file line number Diff line number Diff line change
Expand Up @@ -763,18 +763,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, ']');
Expand Down

0 comments on commit 49aad3c

Please sign in to comment.