diff --git a/CHANGES b/CHANGES index 49c9f52a6..885879e19 100644 --- 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. 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) diff --git a/lib/ftp.c b/lib/ftp.c index de5e95db9..a0eb56d88 100644 --- 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: 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 + + +contents of file + + + +# Client-side + + +ftp + +# tool is what to use instead of 'curl' + +lib520 + + + +FTP RETR with FILETIME + + +ftp://%HOSTIP:%FTPPORT/520 + + +REPLY MDTM 213 20030405060708 + + + +# +# Verify data after the test has been "shot" + + + +USER anonymous +PASS curl_by_daniel@haxx.se +PWD +MDTM 520 +EPSV +TYPE I +SIZE 520 +RETR 520 +QUIT + + 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, , et al. +# Copyright (C) 1998 - 2005, Daniel Stenberg, , 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; +}