]> granicus.if.org Git - curl/commitdiff
FTP: fix dangling conn->ip_addr dereference on verbose EPSV.
authorPatrick Monnerat <pm@datasphere.ch>
Fri, 8 May 2015 13:26:59 +0000 (15:26 +0200)
committerPatrick Monnerat <pm@datasphere.ch>
Fri, 8 May 2015 13:28:48 +0000 (15:28 +0200)
lib/ftp.c

index 8048618b485f8f95cf4f31023f6a92570647c270..e04f58361228787c0e095ac6e25c7ac1e38f5526 100644 (file)
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -2073,9 +2073,8 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn,
   conn->bits.tcpconnect[SECONDARYSOCKET] = FALSE;
   result = Curl_connecthost(conn, addr);
 
-  Curl_resolv_unlock(data, addr); /* we're done using this address */
-
   if(result) {
+    Curl_resolv_unlock(data, addr); /* we're done using this address */
     if(ftpc->count1 == 0 && ftpcode == 229)
       return ftp_epsv_disable(conn);
 
@@ -2091,8 +2090,9 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn,
 
   if(data->set.verbose)
     /* this just dumps information about this second connection */
-    ftp_pasv_verbose(conn, conn->ip_addr, ftpc->newhost, connectport);
+    ftp_pasv_verbose(conn, addr->addr, ftpc->newhost, connectport);
 
+  Curl_resolv_unlock(data, addr); /* we're done using this address */
   conn->bits.do_more = TRUE;
   state(conn, FTP_STOP); /* this phase is completed */