From aa47ac4c066fa125ec1bfef941698f49a548aede Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Fri, 4 Mar 2005 23:52:06 +0000 Subject: [PATCH] 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. --- CHANGES | 14 ++++++++++++++ RELEASE-NOTES | 4 +++- lib/ftp.c | 10 ++++++---- tests/data/Makefile.am | 2 +- tests/data/test235 | 42 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 tests/data/test235 diff --git a/CHANGES b/CHANGES index bbc867f66..a3e20b810 100644 --- a/CHANGES +++ b/CHANGES @@ -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) diff --git a/RELEASE-NOTES b/RELEASE-NOTES index a579164bf..ccef16469 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -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) diff --git a/lib/ftp.c b/lib/ftp.c index fc73edc86..de5e95db9 100644 --- a/lib/ftp.c +++ b/lib/ftp.c @@ -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; diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index 71b7398ca..424dd987b 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 + 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 diff --git a/tests/data/test235 b/tests/data/test235 new file mode 100644 index 000000000..c1345b9c2 --- /dev/null +++ b/tests/data/test235 @@ -0,0 +1,42 @@ +# Server-side + + + +# Client-side + + +ftp + + +FTP resumed upload but no file present remotely + + +ftp://%HOSTIP:%FTPPORT/235 -T log/upload235 -C - + + +this is the *****crap******** that we're gonna upload + +worx? + + + +# Verify data after the test has been "shot" + + + + +USER anonymous +PASS curl_by_daniel@haxx.se +PWD +EPSV +TYPE I +SIZE 235 +STOR 235 +QUIT + + +this is the *****crap******** that we're gonna upload + +worx? + +