- Kamil Dudka brought the patch from the Redhat bug entry
authorDaniel Stenberg <daniel@haxx.se>
Tue, 19 May 2009 20:54:31 +0000 (20:54 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 19 May 2009 20:54:31 +0000 (20:54 +0000)
  https://bugzilla.redhat.com/show_bug.cgi?id=427966 which was libcurl closing
  a bad file descriptor when closing down the FTP data connection.  Caolan
  McNamara seems to be the original author of it.

CHANGES
RELEASE-NOTES
lib/ftp.c

diff --git a/CHANGES b/CHANGES
index c985a4e..2b26a05 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,12 @@
 
                                   Changelog
 
+Daniel Stenberg (19 May 2009)
+- Kamil Dudka brought the patch from the Redhat bug entry
+  https://bugzilla.redhat.com/show_bug.cgi?id=427966 which was libcurl closing
+  a bad file descriptor when closing down the FTP data connection.  Caolan
+  McNamara seems to be the original author of it.
+
 Version 7.19.5 (18 May 2009)
 
 Daniel Stenberg (17 May 2009)
index 91b5b67..6388ea5 100644 (file)
@@ -13,7 +13,7 @@ This release includes the following changes:
 
 This release includes the following bugfixes:
 
- o 
+ o crash on bad socket close with FTP
 
 This release includes the following known bugs:
 
@@ -22,6 +22,6 @@ This release includes the following known bugs:
 This release would not have looked like this without help, code, reports and
 advice from friends like these:
 
+ Kamil Dudka, Caolan McNamara
 
         Thanks! (and sorry if I forgot to mention someone)
index ebd04f9..0bd0771 100644 (file)
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -3251,9 +3251,10 @@ static CURLcode ftp_done(struct connectdata *conn, CURLcode status,
       /* Note that we keep "use" set to TRUE since that (next) connection is
          still requested to use SSL */
     }
-    sclose(conn->sock[SECONDARYSOCKET]);
-
-    conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD;
+    if(CURL_SOCKET_BAD != conn->sock[SECONDARYSOCKET]) {
+      sclose(conn->sock[SECONDARYSOCKET]);
+      conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD;
+    }
   }
 
   if((ftp->transfer == FTPTRANSFER_BODY) && ftpc->ctl_valid &&