]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
asyn: bring back port to the Curl_async struct
authorDaniel Stenberg <daniel@haxx.se>
Sat, 1 Mar 2025 17:22:59 +0000 (18:22 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Sun, 2 Mar 2025 09:51:00 +0000 (10:51 +0100)
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

lib/asyn-ares.c
lib/asyn-thread.c
lib/hostasyn.c
lib/urldata.h

index b530c4a0823fe7e9e7dd74a5319c749cbf0cbab4..b15b3e197ffc5d6c5d7d5588ee721a7c2d3c33e4 100644 (file)
@@ -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)) {
index 7c14d80dad3c94e68fc59fb10eb2465a0d849b9e..25dc7a90ac5d18abf535e53a37edeaef1c3c1c9f 100644 (file)
@@ -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;
index 8a5a674dfbfcf71f0c9e97eeb884ca95cf51e053..44b1fe1bfa2da5c9db8a94a0039d84fc29130b5c 100644 (file)
@@ -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);
 
index c2b50e6fe98c1e8b3cdd203065846b33202c9f6b..2acce8ed0df1ac51ef60b79e28fb0288ec9f8078 100644 (file)
@@ -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 */
 };