Added test case 235 that makes a resumed upload of a file that isn't present

on the remote side. This then converts the operation to an ordinary STOR
upload. This was requested/pointed out by Ignacio Vazquez-Abrams.

It also proved (and I fixed) a bug in the newly rewritten ftp code (and
present in the 7.13.1 release) when trying to resume an upload and the servers
returns an error to the SIZE command. libcurl then loops and sends SIZE
commands infinitely.
This commit is contained in:
Daniel Stenberg 2005-03-04 23:52:06 +00:00
parent b01151e81c
commit aa47ac4c06
5 changed files with 66 additions and 6 deletions

14
CHANGES
View File

@ -7,6 +7,20 @@
Changelog
Daniel (5 March 2005)
- Added test case 235 that makes a resumed upload of a file that isn't present
on the remote side. This then converts the operation to an ordinary STOR
upload. This was requested/pointed out by Ignacio Vazquez-Abrams.
It also proved (and I fixed) a bug in the newly rewritten ftp code (and
present in the 7.13.1 release) when trying to resume an upload and the
servers returns an error to the SIZE command. libcurl then loops and sends
SIZE commands infinitely.
- Dan Fandrich fixed a SSL problem introduced on February 9th that made
libcurl attempt to load the whole random file to seed the PRNG. This is
really bad since this turns out to be using /dev/urandom at times...
Version 7.13.1 (4 March 2005)
Daniel (4 March 2005)

View File

@ -14,7 +14,8 @@ This release includes the following changes:
This release includes the following bugfixes:
o
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:
@ -23,5 +24,6 @@ Other curl-related news since the previous public release:
This release would not have looked like this without help, code, reports and
advice from friends like these:
Dan Fandrich, Ignacio Vazquez-Abrams
Thanks! (and sorry if I forgot to mention someone)

View File

@ -1339,14 +1339,16 @@ static CURLcode ftp_state_post_cwd(struct connectdata *conn)
/* This is called after the TYPE and possible quote commands have been sent */
static CURLcode ftp_state_ul_setup(struct connectdata *conn)
static CURLcode ftp_state_ul_setup(struct connectdata *conn,
bool sizechecked)
{
CURLcode result = CURLE_OK;
struct FTP *ftp = conn->proto.ftp;
struct SessionHandle *data = conn->data;
curl_off_t passed=0;
if(conn->resume_from) {
if((conn->resume_from && !sizechecked) ||
((conn->resume_from > 0) && sizechecked)) {
/* we're about to continue the uploading of a file */
/* 1. get already existing file's size. We use the SIZE command for this
which may not exist in the server! The SIZE command is not in
@ -1480,7 +1482,7 @@ static CURLcode ftp_state_quote(struct connectdata *conn,
state(conn, FTP_RETR_SIZE);
break;
case FTP_STOR_PREQUOTE:
result = ftp_state_ul_setup(conn);
result = ftp_state_ul_setup(conn, FALSE);
break;
case FTP_POSTQUOTE:
break;
@ -1936,7 +1938,7 @@ static CURLcode ftp_state_size_resp(struct connectdata *conn,
result = ftp_state_post_retr_size(conn, filesize);
else if(instate == FTP_STOR_SIZE) {
conn->resume_from = filesize;
result = ftp_state_ul_setup(conn);
result = ftp_state_ul_setup(conn, TRUE);
}
return result;

View 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
test229 test233 test234 test235
# 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

42
tests/data/test235 Normal file
View File

@ -0,0 +1,42 @@
# Server-side
<reply>
</reply>
# Client-side
<client>
<server>
ftp
</server>
<name>
FTP resumed upload but no file present remotely
</name>
<command>
ftp://%HOSTIP:%FTPPORT/235 -T log/upload235 -C -
</command>
<file name="log/upload235">
this is the *****crap******** that we're gonna upload
worx?
</file>
</client>
# Verify data after the test has been "shot"
<verify>
<strip>
</strip>
<protocol>
USER anonymous
PASS curl_by_daniel@haxx.se
PWD
EPSV
TYPE I
SIZE 235
STOR 235
QUIT
</protocol>
<upload>
this is the *****crap******** that we're gonna upload
worx?
</upload>
</verify>