summaryrefslogtreecommitdiff
path: root/lib/http_proxy.c
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2021-09-12 00:20:22 +0200
committerDaniel Stenberg <daniel@haxx.se>2021-09-12 00:23:51 +0200
commit2ddaed81b334bfb23a4f850a4714cbace1113a6d (patch)
tree8940e13e814da27846e1244259e35c13a6565127 /lib/http_proxy.c
parent3cb8a748670ab88c261e0032605105e2db879317 (diff)
downloadcurl-2ddaed81b334bfb23a4f850a4714cbace1113a6d.tar.gz
http_proxy: fix the User-Agent inclusion in CONNECT
It should not refer to the uagent string that is allocated and created for the end server http request, as that pointer may be cleared on subsequent CONNECT requests. Added test case 1184 to verify. Reported-by: T200proX7 on github Fixes #7705
Diffstat (limited to 'lib/http_proxy.c')
-rw-r--r--lib/http_proxy.c25
1 files changed, 10 insertions, 15 deletions
diff --git a/lib/http_proxy.c b/lib/http_proxy.c
index c4fba9d06..fe63b8c15 100644
--- a/lib/http_proxy.c
+++ b/lib/http_proxy.c
@@ -300,32 +300,27 @@ static CURLcode CONNECT(struct Curl_easy *data,
hostheader, TRUE);
if(!result) {
- const char *proxyconn = "";
- const char *useragent = "";
const char *httpv =
(conn->http_proxy.proxytype == CURLPROXY_HTTP_1_0) ? "1.0" : "1.1";
- if(!Curl_checkProxyheaders(data, conn, "Proxy-Connection"))
- proxyconn = "Proxy-Connection: Keep-Alive\r\n";
-
- if(!Curl_checkProxyheaders(data, conn, "User-Agent") &&
- data->set.str[STRING_USERAGENT])
- useragent = data->state.aptr.uagent;
-
result =
Curl_dyn_addf(req,
"CONNECT %s HTTP/%s\r\n"
"%s" /* Host: */
- "%s" /* Proxy-Authorization */
- "%s" /* User-Agent */
- "%s", /* Proxy-Connection */
+ "%s", /* Proxy-Authorization */
hostheader,
httpv,
host?host:"",
data->state.aptr.proxyuserpwd?
- data->state.aptr.proxyuserpwd:"",
- useragent,
- proxyconn);
+ data->state.aptr.proxyuserpwd:"");
+
+ if(!result && !Curl_checkProxyheaders(data, conn, "User-Agent") &&
+ data->set.str[STRING_USERAGENT])
+ result = Curl_dyn_addf(req, "User-Agent: %s\r\n",
+ data->set.str[STRING_USERAGENT]);
+
+ if(!result && !Curl_checkProxyheaders(data, conn, "Proxy-Connection"))
+ result = Curl_dyn_add(req, "Proxy-Connection: Keep-Alive\r\n");
if(!result)
result = Curl_add_custom_headers(data, TRUE, req);