aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYang Tse <yangsita@gmail.com>2011-09-01 15:38:30 +0200
committerYang Tse <yangsita@gmail.com>2011-09-01 15:38:30 +0200
commitfdf157abdfd8112b2454bfad7dfd57bb386966c5 (patch)
tree144381f968aceb8d69d2f6469d19d6f955fe66e7
parent437848d75443aa1a189cb81dfaaad9f19d0cc60b (diff)
ftp.c: fix some leaks torture tests detected 2011-08-30 - follow-up
follow-up for commit d20408e8
-rw-r--r--lib/ftp.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/lib/ftp.c b/lib/ftp.c
index a6362b24c..18fa8cfcd 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -964,6 +964,13 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,
conn->bits.ftp_use_eprt = TRUE;
#endif
+ /* we set the secondary socket variable to this for now, it is only so that
+ the cleanup function will close it in case we fail before the true
+ secondary stuff is made */
+ if(CURL_SOCKET_BAD != conn->sock[SECONDARYSOCKET])
+ Curl_closesocket(conn, conn->sock[SECONDARYSOCKET]);
+ conn->sock[SECONDARYSOCKET] = portsock;
+
for(; fcmd != DONE; fcmd++) {
if(!conn->bits.ftp_use_eprt && (EPRT == fcmd))
@@ -999,10 +1006,8 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,
result = Curl_pp_sendf(&ftpc->pp, "%s |%d|%s|%hu|", mode[fcmd],
sa->sa_family == AF_INET?1:2,
myhost, port);
- if(result) {
- Curl_closesocket(conn, portsock);
+ if(result)
return result;
- }
break;
}
else if(PORT == fcmd) {
@@ -1022,10 +1027,8 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,
snprintf(dest, 20, ",%d,%d", (int)(port>>8), (int)(port&0xff));
result = Curl_pp_sendf(&ftpc->pp, "%s %s", mode[fcmd], tmp);
- if(result) {
- Curl_closesocket(conn, portsock);
+ if(result)
return result;
- }
break;
}
}
@@ -1033,13 +1036,6 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,
/* store which command was sent */
ftpc->count1 = fcmd;
- /* we set the secondary socket variable to this for now, it is only so that
- the cleanup function will close it in case we fail before the true
- secondary stuff is made */
- if(CURL_SOCKET_BAD != conn->sock[SECONDARYSOCKET])
- Curl_closesocket(conn, conn->sock[SECONDARYSOCKET]);
- conn->sock[SECONDARYSOCKET] = portsock;
-
/* this tcpconnect assignment below is a hackish work-around to make the
multi interface with active FTP work - as it will not wait for a
(passive) connect in Curl_is_connected().