]> granicus.if.org Git - curl/commitdiff
Added test case 235 that makes a resumed upload of a file that isn't present
authorDaniel Stenberg <daniel@haxx.se>
Fri, 4 Mar 2005 23:52:06 +0000 (23:52 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Fri, 4 Mar 2005 23:52:06 +0000 (23:52 +0000)
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
RELEASE-NOTES
lib/ftp.c
tests/data/Makefile.am
tests/data/test235 [new file with mode: 0644]

diff --git a/CHANGES b/CHANGES
index bbc867f666a02d76bf721d5b9b3a6dfa4364f66e..a3e20b810a5b08722fbce6b62078f2558552eec0 100644 (file)
--- 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)
index a579164bfbd38bc2af67398a2f768a7110dbaa96..ccef164691b6b694b9e24c67aed8bd31dcbe1dbb 100644 (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)
index fc73edc861af0b853a215af41e6fe715980bb102..de5e95db914eaf1ac1042450651c8ad5038bad8c 100644 (file)
--- 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;
index 71b7398ca2fdad2dc442d5e4a6945e068fac4dda..424dd987b2bc038cd623274021bb4bef20faad8b 100644 (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
diff --git a/tests/data/test235 b/tests/data/test235
new file mode 100644 (file)
index 0000000..c1345b9
--- /dev/null
@@ -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\r
+PASS curl_by_daniel@haxx.se\r
+PWD\r
+EPSV\r
+TYPE I\r
+SIZE 235\r
+STOR 235\r
+QUIT\r
+</protocol>
+<upload>
+this is the *****crap******** that we're gonna upload
+
+worx?
+</upload>
+</verify>