]> granicus.if.org Git - curl/commitdiff
FTP: do_more: add check for wait_data_conn in upload case
authorDaniel Stenberg <daniel@haxx.se>
Tue, 8 Sep 2015 07:29:03 +0000 (09:29 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 8 Sep 2015 07:29:03 +0000 (09:29 +0200)
In some timing-dependnt cases when a 4xx response immediately followed
after a 150 when a STOR was issued, this function would wrongly return
'complete == true' while 'wait_data_conn' was still set.

Closes #405

Reported-by: Patricia Muscalu
lib/ftp.c

index 7b7e11389fbd6d5f0730dc892e331e61732ae334..2351638df0c0d3d362755aa55603f0fc2dd5e598 100644 (file)
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -3723,7 +3723,13 @@ static CURLcode ftp_do_more(struct connectdata *conn, int *completep)
         return result;
 
       result = ftp_multi_statemach(conn, &complete);
-      *completep = (int)complete;
+      if(ftpc->wait_data_conn)
+        /* if we reach the end of the FTP state machine here, *complete will be
+           TRUE but so is ftpc->wait_data_conn, which says we need to wait for
+           the data connection and therefore we're not actually complete */
+        *completep = 0;
+      else
+        *completep = (int)complete;
     }
     else {
       /* download */