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
This commit is contained in:
Daniel Stenberg 2021-02-04 13:05:03 +01:00
parent 5f08a5acd5
commit e32601e13a
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
9 changed files with 18 additions and 69 deletions

View File

@ -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);

View File

@ -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 \

View File

@ -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>

View File

@ -44,7 +44,6 @@ CWD path with spaces
CWD and things2
EPSV
TYPE A
SIZE 106
RETR 106
QUIT
</protocol>

View File

@ -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>

View File

@ -37,7 +37,6 @@ CWD tmp
CWD moo
EPSV
TYPE A
SIZE 143
RETR 143
QUIT
</protocol>

View File

@ -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

View File

@ -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

View File

@ -45,7 +45,6 @@ PASS ftp@example.com
PWD
EPSV
TYPE A
SIZE 562
RETR 562
QUIT
</protocol>