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:
10
CHANGES
10
CHANGES
@@ -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.
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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
45
tests/data/test520
Normal 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>
|
||||||
@@ -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
13
tests/libtest/lib520.c
Normal 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;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user