From: Daniel Stenberg Date: Sat, 1 Mar 2025 17:22:59 +0000 (+0100) Subject: asyn: bring back port to the Curl_async struct X-Git-Tag: curl-8_13_0~307 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2633961d56b16fa47ca7b781aaa1b2b934e80e09;p=thirdparty%2Fcurl.git asyn: bring back port to the Curl_async struct To make sure we store and use the correct port used for this particular lookup. Partial revert of 8ded8e5f3f Fixes #16531 Reported-by: Jay Satiro Closes #16532 --- diff --git a/lib/asyn-ares.c b/lib/asyn-ares.c index b530c4a082..b15b3e197f 100644 --- a/lib/asyn-ares.c +++ b/lib/asyn-ares.c @@ -592,7 +592,7 @@ static void query_completed_cb(void *arg, /* (struct connectdata *) */ res->num_pending--; if(CURL_ASYNC_SUCCESS == status) { - struct Curl_addrinfo *ai = Curl_he2ai(hostent, data->conn->remote_port); + struct Curl_addrinfo *ai = Curl_he2ai(hostent, data->state.async.port); if(ai) { compound_results(res, ai); } @@ -774,6 +774,7 @@ struct Curl_addrinfo *Curl_resolver_getaddrinfo(struct Curl_easy *data, if(!res->hostname) return NULL; + data->state.async.port = port; data->state.async.done = FALSE; /* not done */ data->state.async.dns = NULL; /* clear */ @@ -809,7 +810,6 @@ struct Curl_addrinfo *Curl_resolver_getaddrinfo(struct Curl_easy *data, service, &hints, addrinfo_cb, data); } #else - (void)port; #ifdef HAVE_CARES_IPV6 if((data->conn->ip_version != CURL_IPRESOLVE_V4) && Curl_ipv6works(data)) { diff --git a/lib/asyn-thread.c b/lib/asyn-thread.c index 7c14d80dad..25dc7a90ac 100644 --- a/lib/asyn-thread.c +++ b/lib/asyn-thread.c @@ -436,6 +436,7 @@ static bool init_resolve_thread(struct Curl_easy *data, int err = ENOMEM; struct Curl_async *async = &data->state.async; + async->port = port; async->done = FALSE; async->dns = NULL; td->thread_hnd = curl_thread_t_null; diff --git a/lib/hostasyn.c b/lib/hostasyn.c index 8a5a674dfb..44b1fe1bfa 100644 --- a/lib/hostasyn.c +++ b/lib/hostasyn.c @@ -77,7 +77,7 @@ CURLcode Curl_addrinfo_callback(struct Curl_easy *data, dns = Curl_cache_addr(data, ai, data->conn->host.dispname, 0, - data->conn->localport, FALSE); + data->state.async.port, FALSE); if(data->share) Curl_share_unlock(data, CURL_LOCK_DATA_DNS); diff --git a/lib/urldata.h b/lib/urldata.h index c2b50e6fe9..2acce8ed0d 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -572,6 +572,7 @@ struct Curl_async { #endif void *resolver; /* resolver state, if it is used in the URL state - ares_channel e.g. */ + int port; BIT(done); /* set TRUE when the lookup is complete */ };