summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2021-02-04 13:05:03 +0100
committerDaniel Stenberg <daniel@haxx.se>2021-02-04 23:06:03 +0100
commite32601e13ab258a4370b46f8c5d360eab9d5ee8f (patch)
tree2b6c73a6ed15b4bcf6f2cbdec66883fcd43966c6
parent5f08a5acd5380e41b8966dae96241bd1b4889b2c (diff)
downloadcurl-e32601e13ab258a4370b46f8c5d360eab9d5ee8f.tar.gz
ftp: avoid SIZE when asking for a TYPE A file
... as we ignore it anyway because servers don't report the correct size and proftpd even blatantly returns a 550. Updates a set of tests accordingly. Reported-by: awesomenode on github Fixes #6564 Closes #6565
-rw-r--r--lib/ftp.c20
-rw-r--r--tests/data/Makefile.inc2
-rw-r--r--tests/data/test1052
-rw-r--r--tests/data/test1061
-rw-r--r--tests/data/test12952
-rw-r--r--tests/data/test1431
-rw-r--r--tests/data/test3364
-rw-r--r--tests/data/test3374
-rw-r--r--tests/data/test5621
9 files changed, 18 insertions, 69 deletions
diff --git a/lib/ftp.c b/lib/ftp.c
index cfccc390d..8de959c40 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -1747,13 +1747,19 @@ static CURLcode ftp_state_quote(struct Curl_easy *data,
result = ftp_state_retr(data, ftpc->known_filesize);
}
else {
- if(data->set.ignorecl) {
- /* This code is to support download of growing files. It prevents
- the state machine from requesting the file size from the
- server. With an unknown file size the download continues until
- the server terminates it, otherwise the client stops if the
- received byte count exceeds the reported file size. Set option
- CURLOPT_IGNORE_CONTENT_LENGTH to 1 to enable this behavior.*/
+ if(data->set.ignorecl || data->set.prefer_ascii) {
+ /* 'ignorecl' is used to support download of growing files. It
+ prevents the state machine from requesting the file size from
+ the server. With an unknown file size the download continues
+ until the server terminates it, otherwise the client stops if
+ the received byte count exceeds the reported file size. Set
+ option CURLOPT_IGNORE_CONTENT_LENGTH to 1 to enable this
+ behavior.
+
+ In addition: asking for the size for 'TYPE A' transfers is not
+ constructive since servers don't report the converted size. So
+ skip it.
+ */
result = Curl_pp_sendf(data, &ftpc->pp, "RETR %s", ftpc->file);
if(!result)
state(data, FTP_RETR);
diff --git a/tests/data/Makefile.inc b/tests/data/Makefile.inc
index 5ebf049b8..6b6f2bc5f 100644
--- a/tests/data/Makefile.inc
+++ b/tests/data/Makefile.inc
@@ -34,7 +34,7 @@ test90 test91 test92 test93 test94 test95 test96 test97 test98 test99 \
test100 test101 test102 test103 test104 test105 test106 test107 test108 \
test109 test110 test111 test112 test113 test114 test115 test116 test117 \
test118 test119 test120 test121 test122 test123 test124 test125 test126 \
-test127 test128 test129 test130 test131 test132 test133 test134 test135 \
+test127 test128 test130 test131 test132 test133 test134 test135 \
test136 test137 test138 test139 test140 test141 test142 test143 test144 \
test145 test146 test147 test148 test149 test150 test151 test152 test153 \
test154 test155 test156 test157 test158 test159 test160 test161 test162 \
diff --git a/tests/data/test105 b/tests/data/test105
index cc811aeb8..14679d17b 100644
--- a/tests/data/test105
+++ b/tests/data/test105
@@ -19,7 +19,6 @@ works
</data>
<servercmd>
REPLY EPSV 500 no such command
-REPLY SIZE 500 no such command
</servercmd>
</reply>
@@ -45,7 +44,6 @@ PWD
EPSV
PASV
TYPE A
-SIZE 105
RETR 105
QUIT
</protocol>
diff --git a/tests/data/test106 b/tests/data/test106
index 56eca6420..b7676f7a0 100644
--- a/tests/data/test106
+++ b/tests/data/test106
@@ -44,7 +44,6 @@ CWD path with spaces
CWD and things2
EPSV
TYPE A
-SIZE 106
RETR 106
QUIT
</protocol>
diff --git a/tests/data/test129 b/tests/data/test129
deleted file mode 100644
index cf1e8391d..000000000
--- a/tests/data/test129
+++ /dev/null
@@ -1,52 +0,0 @@
-<testcase>
-<info>
-<keywords>
-FTP
-EPSV
-TYPE A
-RETR
-type=
-</keywords>
-</info>
-# Server-side
-<reply>
-<size>
-37
-</size>
-<data>
-data
- to
- see
-that FTP
-works
- so does it?
-</data>
-</reply>
-
-# Client-side
-<client>
-<server>
-ftp
-</server>
- <name>
-FTP GET with type=A style ASCII URL and understated server SIZE
- </name>
- <command>
-"ftp://%HOSTIP:%FTPPORT/129;type=A"
-</command>
-</client>
-
-# Verify data after the test has been "shot"
-<verify>
-<protocol>
-USER anonymous
-PASS ftp@example.com
-PWD
-EPSV
-TYPE A
-SIZE 129
-RETR 129
-QUIT
-</protocol>
-</verify>
-</testcase>
diff --git a/tests/data/test143 b/tests/data/test143
index 0f36dd9c3..22bec3323 100644
--- a/tests/data/test143
+++ b/tests/data/test143
@@ -37,7 +37,6 @@ CWD tmp
CWD moo
EPSV
TYPE A
-SIZE 143
RETR 143
QUIT
</protocol>
diff --git a/tests/data/test336 b/tests/data/test336
index 85477c96c..cba846d4b 100644
--- a/tests/data/test336
+++ b/tests/data/test336
@@ -35,7 +35,7 @@ ftp
FTP range download when SIZE doesn't work
</name>
<command>
-ftp://%HOSTIP:%FTPPORT/336 --use-ascii --range 3-6
+ftp://%HOSTIP:%FTPPORT/336 --range 3-6
</command>
</client>
@@ -47,7 +47,7 @@ PASS ftp@example.com
PWD
EPSV
PASV
-TYPE A
+TYPE I
SIZE 336
REST 3
RETR 336
diff --git a/tests/data/test337 b/tests/data/test337
index 80086dda7..9ae4dfac5 100644
--- a/tests/data/test337
+++ b/tests/data/test337
@@ -35,7 +35,7 @@ ftp
FTP range download with SIZE returning extra crap
</name>
<command>
-ftp://%HOSTIP:%FTPPORT/337 --use-ascii --range 3-6
+ftp://%HOSTIP:%FTPPORT/337 --range 3-6
</command>
</client>
@@ -47,7 +47,7 @@ PASS ftp@example.com
PWD
EPSV
PASV
-TYPE A
+TYPE I
SIZE 337
REST 3
RETR 337
diff --git a/tests/data/test562 b/tests/data/test562
index 070cf7aa1..35f4f53d7 100644
--- a/tests/data/test562
+++ b/tests/data/test562
@@ -45,7 +45,6 @@ PASS ftp@example.com
PWD
EPSV
TYPE A
-SIZE 562
RETR 562
QUIT
</protocol>