diff options
author | Daniel Stenberg <daniel@haxx.se> | 2020-03-08 17:24:50 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2020-03-08 22:51:47 +0100 |
commit | f0e81605451b363617889820e17a35c262fdee78 (patch) | |
tree | 291b8d14b5f69d319e0804531752ae2c4d72deef /lib | |
parent | 77336671dc4d036bc36c135afba47ea52b1b6663 (diff) | |
download | curl-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')
-rw-r--r-- | lib/socks.c | 6 |
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: |