diff options
-rw-r--r-- | CHANGES | 14 | ||||
-rw-r--r-- | RELEASE-NOTES | 4 | ||||
-rw-r--r-- | lib/ftp.c | 10 | ||||
-rw-r--r-- | tests/data/Makefile.am | 2 | ||||
-rw-r--r-- | tests/data/test235 | 42 |
5 files changed, 66 insertions, 6 deletions
@@ -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) @@ -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 +<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> |