aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES4
-rw-r--r--RELEASE-NOTES1
-rw-r--r--TODO-RELEASE2
-rw-r--r--lib/transfer.c26
-rw-r--r--tests/data/DISABLED2
5 files changed, 23 insertions, 12 deletions
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
+