]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
ftp: do not strdup DATA hostname
authorStefan Eissing <stefan@eissing.org>
Tue, 17 Mar 2026 12:13:04 +0000 (13:13 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 17 Mar 2026 12:42:25 +0000 (13:42 +0100)
Since `newhost` is already allocated, we do not need to strdup()
it. Just assign and NULL the reference.

Closes #20953

lib/ftp.c

index 4d9c2bcb714594acd49e89a3445e4210cb9e4cf9..8570ad098441793ba518ce17d780d8e9d3674b75 100644 (file)
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -2196,6 +2196,12 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data,
     }
   }
 
+  DEBUGASSERT(newhost);
+  curlx_free(conn->secondaryhostname);
+  conn->secondary_port = newport;
+  conn->secondaryhostname = newhost;
+  newhost = NULL;
+
   result = Curl_conn_setup(data, conn, SECONDARYSOCKET, dns,
                            conn->bits.ftp_use_data_ssl ?
                            CURL_CF_SSL_ENABLE : CURL_CF_SSL_DISABLE);
@@ -2203,10 +2209,8 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data,
   if(result) {
     if((result != CURLE_OUT_OF_MEMORY) &&
        (ftpc->count1 == 0) && (ftpcode == 229)) {
-      curlx_free(newhost);
-      return ftp_epsv_disable(data, ftpc, conn);
+      result = ftp_epsv_disable(data, ftpc, conn);
     }
-
     goto error;
   }
 
@@ -2223,18 +2227,11 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data,
      */
     char buf[256];
     Curl_printable_address(dns->addr, buf, sizeof(buf));
-    infof(data, "Connecting to %s (%s) port %d", newhost, buf, connectport);
+    infof(data, "Connecting to %s (%s) port %d",
+          conn->secondaryhostname, buf, connectport);
   }
 #endif
 
-  curlx_free(conn->secondaryhostname);
-  conn->secondary_port = newport;
-  conn->secondaryhostname = curlx_strdup(newhost);
-  if(!conn->secondaryhostname) {
-    result = CURLE_OUT_OF_MEMORY;
-    goto error;
-  }
-
   conn->bits.do_more = TRUE;
   ftp_state(data, ftpc, FTP_STOP); /* this phase is completed */