Commit b5dcdad34de01283e72e66ffca4b7be6fdbddf9f

Edward Thomson 2021-05-16T12:53:58

Merge pull request #5852 from implausible/httpclient/skip-entire-body Fix issues with Proxy Authentication after httpclient refactor

diff --git a/src/transports/httpclient.c b/src/transports/httpclient.c
index d397574..ba86184 100644
--- a/src/transports/httpclient.c
+++ b/src/transports/httpclient.c
@@ -681,6 +681,11 @@ static int generate_connect_request(
 	return git_buf_oom(buf) ? -1 : 0;
 }
 
+static bool use_connect_proxy(git_http_client *client)
+{
+    return client->proxy.url.host && !strcmp(client->server.url.scheme, "https");
+}
+
 static int generate_request(
 	git_http_client *client,
 	git_http_request *request)
@@ -734,7 +739,8 @@ static int generate_request(
 		git_buf_printf(buf, "Expect: 100-continue\r\n");
 
 	if ((error = apply_server_credentials(buf, client, request)) < 0 ||
-	    (error = apply_proxy_credentials(buf, client, request)) < 0)
+	    (!use_connect_proxy(client) &&
+			(error = apply_proxy_credentials(buf, client, request)) < 0))
 		return error;
 
 	if (request->custom_headers) {
@@ -1027,8 +1033,7 @@ static int http_client_connect(
 	reset_parser(client);
 
 	/* Reconnect to the proxy if necessary. */
-	use_proxy = client->proxy.url.host &&
-	            !strcmp(client->server.url.scheme, "https");
+	use_proxy = use_connect_proxy(client);
 
 	if (use_proxy) {
 		if (!client->proxy_connected || !client->keepalive ||
@@ -1503,7 +1508,7 @@ int git_http_client_skip_body(git_http_client *client)
 			              "unexpected data handled in callback");
 			error = -1;
 		}
-	} while (!error);
+	} while (error >= 0 && client->state != DONE);
 
 	if (error < 0)
 		client->connected = 0;