diff options
author | Daniel Stenberg <daniel@haxx.se> | 2005-03-08 08:09:14 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2005-03-08 08:09:14 +0000 |
commit | 702664e9591197c10ec36ab7a0ab7395b77726d7 (patch) | |
tree | bb85a68dd1afdce9062a51aa0766d81705098ea3 | |
parent | 18d87edd6d155c8f94233f8e0c32aa1b7434a038 (diff) |
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)
-rw-r--r-- | CHANGES | 10 | ||||
-rw-r--r-- | RELEASE-NOTES | 5 | ||||
-rw-r--r-- | lib/ftp.c | 8 | ||||
-rw-r--r-- | tests/data/Makefile.am | 2 | ||||
-rw-r--r-- | tests/data/test520 | 45 | ||||
-rw-r--r-- | tests/libtest/Makefile.am | 8 | ||||
-rw-r--r-- | tests/libtest/lib520.c | 13 |
7 files changed, 84 insertions, 7 deletions
@@ -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. diff --git a/RELEASE-NOTES b/RELEASE-NOTES index ccef16469..259fea3fd 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -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) @@ -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: diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index b15e1ce91..e34974ea1 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -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 index 000000000..b12f47cc2 --- /dev/null +++ b/tests/data/test520 @@ -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
+PASS curl_by_daniel@haxx.se
+PWD
+MDTM 520
+EPSV
+TYPE I
+SIZE 520
+RETR 520
+QUIT
+</protocol> +</verify> diff --git a/tests/libtest/Makefile.am b/tests/libtest/Makefile.am index e5bc1eab4..acdeb5501 100644 --- a/tests/libtest/Makefile.am +++ b/tests/libtest/Makefile.am @@ -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 index 000000000..efc2823a1 --- /dev/null +++ b/tests/libtest/lib520.c @@ -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; +} |