summaryrefslogtreecommitdiff
path: root/lib/socks.c
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2020-03-08 17:24:50 +0100
committerDaniel Stenberg <daniel@haxx.se>2020-03-08 22:51:47 +0100
commitf0e81605451b363617889820e17a35c262fdee78 (patch)
tree291b8d14b5f69d319e0804531752ae2c4d72deef /lib/socks.c
parent77336671dc4d036bc36c135afba47ea52b1b6663 (diff)
downloadcurl-f0e81605451b363617889820e17a35c262fdee78.tar.gz
socks4: fix host resolve regression
1. The socks4 state machine was broken in the host resolving phase 2. The code now insists on IPv4-only when using SOCKS4 as the protocol only supports that. Regression from #4907 and 4a4b63d, shipped in 7.69.0 Reported-by: amishmm on github Bug: https://github.com/curl/curl/issues/5053#issuecomment-596191594 Closes #5061
Diffstat (limited to 'lib/socks.c')
-rw-r--r--lib/socks.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/socks.c b/lib/socks.c
index 754726f6f..37099130e 100644
--- a/lib/socks.c
+++ b/lib/socks.c
@@ -205,6 +205,8 @@ CURLcode Curl_SOCKS4(const char *proxy_user,
switch(sx->state) {
case CONNECT_SOCKS_INIT:
+ /* SOCKS4 can only do IPv4, insist! */
+ conn->ip_version = CURL_IPRESOLVE_V4;
if(conn->bits.httpproxy)
infof(conn->data, "SOCKS4%s: connecting to HTTP proxy %s port %d\n",
protocol4a ? "a" : "", hostname, remote_port);
@@ -261,8 +263,8 @@ CURLcode Curl_SOCKS4(const char *proxy_user,
}
else {
result = Curl_resolv_check(data->conn, &dns);
- /* stay in the state or error out */
- return result;
+ if(!dns)
+ return result;
}
/* FALLTHROUGH */
CONNECT_RESOLVED: