summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2021-03-11 10:00:02 +0100
committerDaniel Stenberg <daniel@haxx.se>2021-03-11 16:13:11 +0100
commit7b2f0676c2eaaa99e8773134414769fab02c2b2d (patch)
treeee25251fa5e58ba6f17b7192b87e45bbb876a61e
parentdcccd8dd25a8e9d476f9bda94f9ebfd0b9f472db (diff)
downloadcurl-7b2f0676c2eaaa99e8773134414769fab02c2b2d.tar.gz
FTP: allow SIZE to fail when doing (resumed) upload
Added test 362 to verify. Reported-by: Jordan Brown Regression since 7ea2e1d0c5a7f (7.73.0) Fixes #6715 Closes #6725
-rw-r--r--lib/ftp.c8
-rw-r--r--tests/data/Makefile.inc2
-rw-r--r--tests/data/test36251
3 files changed, 58 insertions, 3 deletions
diff --git a/lib/ftp.c b/lib/ftp.c
index 56e7cf29e..8b347e34f 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -2309,8 +2309,12 @@ static CURLcode ftp_state_size_resp(struct Curl_easy *data,
}
else if(ftpcode == 550) { /* "No such file or directory" */
- failf(data, "The file does not exist");
- return CURLE_REMOTE_FILE_NOT_FOUND;
+ /* allow a SIZE failure for (resumed) uploads, when probing what command
+ to use */
+ if(instate != FTP_STOR_SIZE) {
+ failf(data, "The file does not exist");
+ return CURLE_REMOTE_FILE_NOT_FOUND;
+ }
}
if(instate == FTP_SIZE) {
diff --git a/tests/data/Makefile.inc b/tests/data/Makefile.inc
index f6e48e3de..6306b5980 100644
--- a/tests/data/Makefile.inc
+++ b/tests/data/Makefile.inc
@@ -60,7 +60,7 @@ test325 test326 test327 test328 test329 test330 test331 test332 test333 \
test334 test335 test336 test337 test338 test339 test340 test341 test342 \
test343 test344 test345 test346 test347 test348 test349 test350 test351 \
test352 test353 test354 test355 test356 test357 test358 test359 test360 \
-test361 \
+test361 test362 \
\
test393 test394 test395 test396 test397 \
\
diff --git a/tests/data/test362 b/tests/data/test362
new file mode 100644
index 000000000..ad585419d
--- /dev/null
+++ b/tests/data/test362
@@ -0,0 +1,51 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+STOR
+</keywords>
+</info>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+ <name>
+FTP resume upload file with nothing to start from
+ </name>
+<file name="log/test362.txt">
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</file>
+ <command>
+ftp://%HOSTIP:%FTPPORT/362 -T log/test362.txt --continue-at -
+</command>
+</client>
+
+<verify>
+<upload>
+data
+ to
+ see
+that FTP
+works
+ so does it?
+</upload>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+SIZE 362
+STOR 362
+QUIT
+</protocol>
+</verify>
+</testcase>