Dominick Meglio reported that using CURLOPT_FILETIME when transferring a FTP
authorDaniel Stenberg <daniel@haxx.se>
Tue, 8 Mar 2005 08:09:14 +0000 (08:09 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 8 Mar 2005 08:09:14 +0000 (08:09 +0000)
file got a Last-Modified: header written to the data stream, corrupting the
actual data. This was because some conditions from the previous FTP code was
not properly brought into the new FTP code. I fixed and I added test case 520
to verify. (This bug was introduced in 7.13.1)

CHANGES
RELEASE-NOTES
lib/ftp.c
tests/data/Makefile.am
tests/data/test520 [new file with mode: 0644]
tests/libtest/Makefile.am
tests/libtest/lib520.c [new file with mode: 0644]

diff --git a/CHANGES b/CHANGES
index 49c9f52..885879e 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -7,6 +7,16 @@
                                   Changelog
 
 
+Daniel (8 March 2005)
+- Dominick Meglio reported that using CURLOPT_FILETIME when transferring a FTP
+  file got a Last-Modified: header written to the data stream, corrupting the
+  actual data. This was because some conditions from the previous FTP code was
+  not properly brought into the new FTP code. I fixed and I added test case
+  520 to verify. (This bug was introduced in 7.13.1)
+
+- Dan Fandrich fixed the configure --with-zlib option to always consider the
+  given path before any standard paths.
+
 Daniel (6 March 2005)
 - Randy McMurchy was the first to report that valgrind.pm was missing from the
   release archive and thus 'make test' fails.
index ccef164..259fea3 100644 (file)
@@ -14,16 +14,17 @@ This release includes the following changes:
 
 This release includes the following bugfixes:
 
+ o CURLOPT_FILETIME when downloading FTP corrupted data
  o FTP upload resume now works even if no file is present on the site
  o SSL seeding no longer attempts to read the whole random file
 
 Other curl-related news since the previous public release:
 
- o 
+ o pycurl 7.13.1 http://pycurl.sf.net
 
 This release would not have looked like this without help, code, reports and
 advice from friends like these:
 
- Dan Fandrich, Ignacio Vazquez-Abrams
+ Dan Fandrich, Ignacio Vazquez-Abrams, Randy McMurchy, Dominick Meglio
 
         Thanks! (and sorry if I forgot to mention someone)
index de5e95d..a0eb56d 100644 (file)
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -1741,7 +1741,11 @@ static CURLcode ftp_state_mdtm_resp(struct connectdata *conn,
       /* If we asked for a time of the file and we actually got one as well,
          we "emulate" a HTTP-style header in our output. */
 
-      if(data->set.get_filetime && (data->info.filetime>=0) ) {
+      if(conn->bits.no_body &&
+         data->set.include_header &&
+         ftp->file &&
+         data->set.get_filetime &&
+         (data->info.filetime>=0) ) {
         struct tm *tm;
         time_t clock = (time_t)data->info.filetime;
 #ifdef HAVE_GMTIME_R
@@ -1763,7 +1767,7 @@ static CURLcode ftp_state_mdtm_resp(struct connectdata *conn,
         result = Curl_client_write(data, CLIENTWRITE_BOTH, buf, 0);
         if(result)
           return result;
-      }
+      } /* end of a ridiculous amount of conditionals */
     }
     break;
   default:
index b15e1ce..e34974e 100644 (file)
@@ -32,7 +32,7 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46        \
  test223 test224 test206 test207 test208 test209 test213 test240       \
  test241 test242 test519 test214 test215 test216 test217 test218       \
  test199 test225 test226 test227 test230 test231 test232 test228       \
- test229 test233 test234 test235 test236
+ test229 test233 test234 test235 test236 test520
 
 # The following tests have been removed from the dist since they no longer
 # work. We need to fix the test suite's FTPS server first, then bring them
diff --git a/tests/data/test520 b/tests/data/test520
new file mode 100644 (file)
index 0000000..b12f47c
--- /dev/null
@@ -0,0 +1,45 @@
+#
+# Server-side
+<reply>
+<data>
+contents of file
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib520
+</tool>
+
+ <name>
+FTP RETR with FILETIME
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/520
+</command>
+<file name="log/ftpserver.cmd">
+REPLY MDTM 213 20030405060708
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+
+<protocol>
+USER anonymous\r
+PASS curl_by_daniel@haxx.se\r
+PWD\r
+MDTM 520\r
+EPSV\r
+TYPE I\r
+SIZE 520\r
+RETR 520\r
+QUIT\r
+</protocol>
+</verify>
index e5bc1ea..acdeb55 100644 (file)
@@ -5,7 +5,7 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2004, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al.
 #
 # This software is licensed as described in the file COPYING, which
 # you should have received as part of this distribution. The terms
@@ -40,7 +40,7 @@ SUPPORTFILES = first.c test.h
 # These are all libcurl test programs
 noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 lib506 lib507 \
   lib508 lib509 lib510 lib511 lib512 lib513 lib514 lib515 lib516 lib517 \
-  lib518 lib519
+  lib518 lib519 lib520
 
 lib500_SOURCES = lib500.c $(SUPPORTFILES)
 lib500_LDADD = $(LIBDIR)/libcurl.la
@@ -121,3 +121,7 @@ lib518_DEPENDENCIES = $(LIBDIR)/libcurl.la
 lib519_SOURCES = lib519.c $(SUPPORTFILES)
 lib519_LDADD = $(LIBDIR)/libcurl.la
 lib519_DEPENDENCIES = $(LIBDIR)/libcurl.la
+
+lib520_SOURCES = lib520.c $(SUPPORTFILES)
+lib520_LDADD = $(LIBDIR)/libcurl.la
+lib520_DEPENDENCIES = $(LIBDIR)/libcurl.la
diff --git a/tests/libtest/lib520.c b/tests/libtest/lib520.c
new file mode 100644 (file)
index 0000000..efc2823
--- /dev/null
@@ -0,0 +1,13 @@
+#include "test.h"
+
+int test(char *URL)
+{
+  CURLcode res;
+  CURL *curl = curl_easy_init();
+  curl_easy_setopt(curl, CURLOPT_URL, URL);
+  curl_easy_setopt(curl, CURLOPT_FILETIME, 1);
+  curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
+  res = curl_easy_perform(curl);
+  curl_easy_cleanup(curl);
+  return (int)res;
+}