From 4e9a1c5bba35e2eab7c2d9770a7cd4940372dbf8 Mon Sep 17 00:00:00 2001 From: Yang Tse Date: Mon, 12 Sep 2011 15:16:07 +0200 Subject: ftp.c: fix socket leak torture tests detected 2011-08-30 Also fix inappropriate error handling when sending ftp EPRT or PORT commands. --- lib/ftp.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/ftp.c b/lib/ftp.c index 8bbd585e5..07c506dda 100644 --- a/lib/ftp.c +++ b/lib/ftp.c @@ -1000,8 +1000,14 @@ 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) + if(result) { + Curl_closesocket(conn, portsock); + /* don't retry using PORT */ + ftpc->count1 = PORT; + /* bail out */ + state(conn, FTP_STOP); return result; + } break; } else if(PORT == fcmd) { @@ -1021,8 +1027,12 @@ 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) + if(result) { + Curl_closesocket(conn, portsock); + /* bail out */ + state(conn, FTP_STOP); return result; + } break; } } -- cgit v1.2.3