diff --git a/CHANGES b/CHANGES index 896077a51..7191f2ce3 100644 --- a/CHANGES +++ b/CHANGES @@ -6,6 +6,10 @@ Changelog +Daniel Stenberg (22 Mar 2008) +- Fixed the problem with doing a zero byte SCP transfer, verified with test + case 617 (which was added by Daniel Fandrich 5 Mar 2008). + Daniel Fandrich (20 Mar 2008) - Fixed a problem where curl-config --protocols could erroneously show LDAPS support when curl didn't even have regular LDAP support. It looks like diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 41c1c95e6..c34d38896 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -50,6 +50,7 @@ This release includes the following bugfixes: o SFTP upload with CURLOPT_FTP_CREATE_MISSING_DIRS on re-used connection o SFTP infinite loop when given an invalid quote command o curl-config erroneously reported LDAPS support with missing LDAP libraries + o SCP infinite loop when downloading a zero byte file This release includes the following known bugs: diff --git a/TODO-RELEASE b/TODO-RELEASE index bd877aaa1..75b7402e8 100644 --- a/TODO-RELEASE +++ b/TODO-RELEASE @@ -3,8 +3,6 @@ To be addressed before 7.18.1 (planned release: April 2008) [feature freeze entered, no new features!] -126 - scp download 0 bytes, test case 617 - 127 - Dan Petitt's Progress During Large Posts problem 128 - Phil Blundell's ares and ipv6 fix diff --git a/lib/transfer.c b/lib/transfer.c index 9918a015d..0856d2a55 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -397,18 +397,26 @@ CURLcode Curl_readwrite(struct connectdata *conn, bytestoread = (size_t)totalleft; } - /* receive data from the network! */ - readrc = Curl_read(conn, conn->sockfd, k->buf, bytestoread, &nread); + if(bytestoread) { + /* receive data from the network! */ + readrc = Curl_read(conn, conn->sockfd, k->buf, bytestoread, &nread); - /* subzero, this would've blocked */ - if(0 > readrc) - break; /* get out of loop */ + /* subzero, this would've blocked */ + if(0 > readrc) + break; /* get out of loop */ - /* get the CURLcode from the int */ - result = (CURLcode)readrc; + /* get the CURLcode from the int */ + result = (CURLcode)readrc; - if(result>0) - return result; + if(result>0) + return result; + } + else { + /* read nothing but since we wanted nothing we consider this an OK + situation to proceed from */ + nread = 0; + result = CURLE_OK; + } if((k->bytecount == 0) && (k->writebytecount == 0)) { Curl_pgrsTime(data, TIMER_STARTTRANSFER); diff --git a/tests/data/DISABLED b/tests/data/DISABLED index eb8bc3190..fb3ae0ec9 100644 --- a/tests/data/DISABLED +++ b/tests/data/DISABLED @@ -3,4 +3,4 @@ # test cases are run by runtests.pl. Just add the plain test case numbers, one # per line. # Lines starting with '#' letters are treated as comments. -617 +