Merge branch 'jk/redact-h2h3-headers-fix'
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
This commit is contained in:
		
							
								
								
									
										37
									
								
								http.c
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								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, ']');
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user