Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 19 Dec 2009 19:22:09 +0000 (UTC)
From:      Attilio Rao <attilio@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r200734 - stable/8/lib/libfetch
Message-ID:  <200912191922.nBJJM9gJ041415@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: attilio
Date: Sat Dec 19 19:22:09 2009
New Revision: 200734
URL: http://svn.freebsd.org/changeset/base/200734

Log:
  MFC r199801:
  Fix a socket leak.
  
  Sponsored by:	Sandvine Incorporated

Modified:
  stable/8/lib/libfetch/ftp.c
Directory Properties:
  stable/8/lib/libfetch/   (props changed)

Modified: stable/8/lib/libfetch/ftp.c
==============================================================================
--- stable/8/lib/libfetch/ftp.c	Sat Dec 19 19:01:24 2009	(r200733)
+++ stable/8/lib/libfetch/ftp.c	Sat Dec 19 19:22:09 2009	(r200734)
@@ -1122,17 +1122,19 @@ ftp_request(struct url *url, const char 
 
 	/* change directory */
 	if (ftp_cwd(conn, url->doc) == -1)
-		return (NULL);
+		goto errsock;
 
 	/* stat file */
 	if (us && ftp_stat(conn, url->doc, us) == -1
 	    && fetchLastErrCode != FETCH_PROTO
 	    && fetchLastErrCode != FETCH_UNAVAIL)
-		return (NULL);
+		goto errsock;
 
 	/* just a stat */
-	if (strcmp(op, "STAT") == 0)
+	if (strcmp(op, "STAT") == 0) {
+		ftp_disconnect(conn);
 		return (FILE *)1; /* bogus return value */
+	}
 	if (strcmp(op, "STOR") == 0 || strcmp(op, "APPE") == 0)
 		oflag = O_WRONLY;
 	else
@@ -1140,6 +1142,10 @@ ftp_request(struct url *url, const char 
 
 	/* initiate the transfer */
 	return (ftp_transfer(conn, op, url->doc, oflag, url->offset, flags));
+
+errsock:
+	ftp_disconnect(conn);
+	return (NULL);
 }
 
 /*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200912191922.nBJJM9gJ041415>