diff options
author | Yang Tse <yangsita@gmail.com> | 2011-09-01 15:38:30 +0200 |
---|---|---|
committer | Yang Tse <yangsita@gmail.com> | 2011-09-01 15:38:30 +0200 |
commit | fdf157abdfd8112b2454bfad7dfd57bb386966c5 (patch) | |
tree | 144381f968aceb8d69d2f6469d19d6f955fe66e7 | |
parent | 437848d75443aa1a189cb81dfaaad9f19d0cc60b (diff) |
ftp.c: fix some leaks torture tests detected 2011-08-30 - follow-up
follow-up for commit d20408e8
-rw-r--r-- | lib/ftp.c | 22 |
1 files changed, 9 insertions, 13 deletions
@@ -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(). |