mirror of
https://github.com/curl/curl.git
synced 2026-08-15 03:03:37 +03:00
FTP: prevent the multi interface from blocking
As pointed out in Bug report #3579064, curl_multi_perform() would wrongly use a blocking mechanism internally for some commands which could lead to for example a very long block if the LIST response never showed. The solution was to make sure to properly continue to use the multi interface non-blocking state machine. The new test 1501 verifies the fix. Bug: http://curl.haxx.se/bug/view.cgi?id=3579064 Reported by: Guido Berhoerster
This commit is contained in:
parent
7c0f201075
commit
b2954e66e8
9 changed files with 234 additions and 22 deletions
|
|
@ -93,7 +93,7 @@ test1379 test1380 test1381 test1382 test1383 test1384 test1385 test1386 \
|
|||
test1387 test1388 test1389 test1390 test1391 test1392 test1393 \
|
||||
test1400 test1401 test1402 test1403 test1404 test1405 test1406 test1407 \
|
||||
test1408 test1409 test1410 test1411 \
|
||||
test1500 \
|
||||
test1500 test1501 \
|
||||
test2000 test2001 test2002 test2003 test2004 test2005 test2006 test2007 \
|
||||
test2008 test2009 test2010 test2011 test2012 test2013 test2014 test2015 \
|
||||
test2016 test2017 test2018 test2019 test2020 test2021 test2022 \
|
||||
|
|
|
|||
53
tests/data/test1501
Normal file
53
tests/data/test1501
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
<testcase>
|
||||
<info>
|
||||
<keywords>
|
||||
FTP
|
||||
RETR
|
||||
multi
|
||||
LIST
|
||||
</keywords>
|
||||
</info>
|
||||
|
||||
# Server-side
|
||||
<reply>
|
||||
<data>
|
||||
</data>
|
||||
<servercmd>
|
||||
DELAY LIST 2
|
||||
DELAY TYPE 2
|
||||
</servercmd>
|
||||
</reply>
|
||||
|
||||
# Client-side
|
||||
<client>
|
||||
<server>
|
||||
ftp
|
||||
</server>
|
||||
<tool>
|
||||
lib1501
|
||||
</tool>
|
||||
<name>
|
||||
FTP with multi interface and slow LIST response
|
||||
</name>
|
||||
<command>
|
||||
ftp://%HOSTIP:%FTPPORT/1501/
|
||||
</command>
|
||||
</client>
|
||||
# Verify data after the test has been "shot"
|
||||
<verify>
|
||||
<errorcode>
|
||||
0
|
||||
</errorcode>
|
||||
<protocol>
|
||||
USER anonymous
|
||||
PASS ftp@example.com
|
||||
PWD
|
||||
CWD 1501
|
||||
EPSV
|
||||
TYPE A
|
||||
LIST
|
||||
QUIT
|
||||
</protocol>
|
||||
|
||||
</verify>
|
||||
</testcase>
|
||||
|
|
@ -63,8 +63,9 @@ TYPE I
|
|||
STOR 591
|
||||
QUIT
|
||||
</protocol>
|
||||
# CURLE_UPLOAD_FAILED = 25
|
||||
<errorcode>
|
||||
10
|
||||
25
|
||||
</errorcode>
|
||||
<upload>
|
||||
</upload>
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@ Moooooooooooo for 592
|
|||
s/^PORT (.*)/PORT/
|
||||
s/^EPRT \|1\|(.*)/EPRT \|1\|/
|
||||
</strippart>
|
||||
# a 421 response must prevent further commands from being sent
|
||||
<protocol>
|
||||
USER anonymous
|
||||
PASS ftp@example.com
|
||||
|
|
@ -61,10 +62,10 @@ EPRT |1|
|
|||
PORT
|
||||
TYPE I
|
||||
STOR 592
|
||||
QUIT
|
||||
</protocol>
|
||||
# 28 == CURLE_OPERATION_TIMEDOUT
|
||||
<errorcode>
|
||||
10
|
||||
28
|
||||
</errorcode>
|
||||
<upload>
|
||||
</upload>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue