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
This commit is contained in:
Daniel Stenberg 2020-03-08 17:24:50 +01:00
Родитель 77336671dc
Коммит f0e8160545
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 5CC908FDB71E12C2
1 изменённых файлов: 4 добавлений и 2 удалений

Просмотреть файл

@ -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: