diff mbox series

[1/2] http: factor out matching of curl http/2 trace lines

Message ID 20230915113316.GA3531587@coredump.intra.peff.net (mailing list archive)
State Accepted
Commit 39fa527c8976da84cf70a9ea6b6d92a1fd9bd772
Headers show
Series updating curl http/2 header matching (again) | expand

Commit Message

Jeff King Sept. 15, 2023, 11:33 a.m. UTC
We have to parse out curl's http/2 trace lines so we can redact their
headers. We already match two different types of lines from various
vintages of curl. In preparation for adding another (which will be
slightly more complex), let's pull the matching into its own function,
rather than doing it in the middle of a conditional.

While we're doing so, let's expand the comment a bit to describe the two
matches. That probably should have been part of db30130165 (http: handle
both "h2" and "h2h3" in curl info lines, 2023-06-17), but will become
even more important as we add new types.

Signed-off-by: Jeff King <peff@peff.net>
---
 http.c | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

Comments

Taylor Blau Sept. 15, 2023, 6:29 p.m. UTC | #1
On Fri, Sep 15, 2023 at 07:33:16AM -0400, Jeff King wrote:
> We have to parse out curl's http/2 trace lines so we can redact their
> headers. We already match two different types of lines from various
> vintages of curl. In preparation for adding another (which will be
> slightly more complex), let's pull the matching into its own function,
> rather than doing it in the middle of a conditional.
>
> While we're doing so, let's expand the comment a bit to describe the two
> matches. That probably should have been part of db30130165 (http: handle
> both "h2" and "h2h3" in curl info lines, 2023-06-17), but will become
> even more important as we add new types.
>
> Signed-off-by: Jeff King <peff@peff.net>

Makes sense, and this sets us up well for the next step in fixing the
test fallout from newer versions of curl.

Thanks,
Taylor
diff mbox series

Patch

diff --git a/http.c b/http.c
index e138b4b96f..c93e0a7ea6 100644
--- a/http.c
+++ b/http.c
@@ -738,18 +738,29 @@  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)
+{
+	/*
+	 * 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;
+
+	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, ']');