]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
socks4: fix host resolve regression
authorDaniel Stenberg <daniel@haxx.se>
Sun, 8 Mar 2020 16:24:50 +0000 (17:24 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Sun, 8 Mar 2020 21:51:47 +0000 (22:51 +0100)
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

lib/socks.c

index 754726f6fb8d63e8add9de05173b005a8594cdbb..37099130e5d2a15a62e42d114c118b3a4932383f 100644 (file)
@@ -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: