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)
This commit is contained in:
Daniel Stenberg
2005-03-08 08:09:14 +00:00
parent 18d87edd6d
commit 702664e959
7 changed files with 84 additions and 7 deletions

10
CHANGES
View File

@@ -7,6 +7,16 @@
Changelog 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) Daniel (6 March 2005)
- Randy McMurchy was the first to report that valgrind.pm was missing from the - Randy McMurchy was the first to report that valgrind.pm was missing from the
release archive and thus 'make test' fails. release archive and thus 'make test' fails.

View File

@@ -14,16 +14,17 @@ This release includes the following changes:
This release includes the following bugfixes: 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 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 o SSL seeding no longer attempts to read the whole random file
Other curl-related news since the previous public release: 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 This release would not have looked like this without help, code, reports and
advice from friends like these: 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) Thanks! (and sorry if I forgot to mention someone)

View File

@@ -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, /* 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. */ 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; struct tm *tm;
time_t clock = (time_t)data->info.filetime; time_t clock = (time_t)data->info.filetime;
#ifdef HAVE_GMTIME_R #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); result = Curl_client_write(data, CLIENTWRITE_BOTH, buf, 0);
if(result) if(result)
return result; return result;
} } /* end of a ridiculous amount of conditionals */
} }
break; break;
default: default:

View File

@@ -32,7 +32,7 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \
test223 test224 test206 test207 test208 test209 test213 test240 \ test223 test224 test206 test207 test208 test209 test213 test240 \
test241 test242 test519 test214 test215 test216 test217 test218 \ test241 test242 test519 test214 test215 test216 test217 test218 \
test199 test225 test226 test227 test230 test231 test232 test228 \ 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 # 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 # work. We need to fix the test suite's FTPS server first, then bring them

45
tests/data/test520 Normal file
View File

@@ -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>

View 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 # This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms # 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 # These are all libcurl test programs
noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 lib506 lib507 \ noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 lib506 lib507 \
lib508 lib509 lib510 lib511 lib512 lib513 lib514 lib515 lib516 lib517 \ lib508 lib509 lib510 lib511 lib512 lib513 lib514 lib515 lib516 lib517 \
lib518 lib519 lib518 lib519 lib520
lib500_SOURCES = lib500.c $(SUPPORTFILES) lib500_SOURCES = lib500.c $(SUPPORTFILES)
lib500_LDADD = $(LIBDIR)/libcurl.la lib500_LDADD = $(LIBDIR)/libcurl.la
@@ -121,3 +121,7 @@ lib518_DEPENDENCIES = $(LIBDIR)/libcurl.la
lib519_SOURCES = lib519.c $(SUPPORTFILES) lib519_SOURCES = lib519.c $(SUPPORTFILES)
lib519_LDADD = $(LIBDIR)/libcurl.la lib519_LDADD = $(LIBDIR)/libcurl.la
lib519_DEPENDENCIES = $(LIBDIR)/libcurl.la lib519_DEPENDENCIES = $(LIBDIR)/libcurl.la
lib520_SOURCES = lib520.c $(SUPPORTFILES)
lib520_LDADD = $(LIBDIR)/libcurl.la
lib520_DEPENDENCIES = $(LIBDIR)/libcurl.la

13
tests/libtest/lib520.c Normal file
View File

@@ -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;
}