diff --git a/CHANGES b/CHANGES index 0d458b04150fcb175041e35d576c459884c252b3..d19a74d1f0f76c9b39b0b98bd1949e2debb477f0 100644 --- a/CHANGES +++ b/CHANGES @@ -6,6 +6,12 @@ Changelog +Daniel S (26 April 2007) +- Peter O'Gorman found a problem with SCP downloads when the downloaded file + was 16385 bytes (16K+1) and it turned out we didn't properly always "suck + out" all data from libssh2. The effect being that libcurl would hang on the + socket waiting for data when libssh2 had in fact already read it all... + Dan F (25 April 2007) - Added support in runtests.pl for "!n" test numbers to disable individual tests. Changed -t to only keep log files around when -k is specified, diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 8e55ca805d611e78d6c74f35210420cdcefabd3d..33ea5a859c9d2c122d6060bc29be16434ab7ab4e 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -5,7 +5,7 @@ Curl and libcurl 7.16.3 Available command line options: 118 Available curl_easy_setopt() options: 141 Number of public functions in libcurl: 54 - Amount of public web site mirrors: 38 + Amount of public web site mirrors: 39 Number of known libcurl bindings: 35 Number of contributors: 554 @@ -29,6 +29,7 @@ This release includes the following bugfixes: o NSS-fix for closing down SSL o bad warning from configure when gnutls was selected o compilation on VMS 64-bit mode + o SCP/SFTP downloads could hang on the last bytes of a transfer This release includes the following known bugs: @@ -45,11 +46,12 @@ New curl mirrors: o http://curl.spegulo.be is a new mirror in Belgium o http://curl.piotrkosoft.net is a new mirror in Poland o http://curl.smudge-it.net is a new mirror in St Louis, MO, USA + o http://curl.askapache.com is a new mirror in Indiana, USA This release would not have looked like this without help, code, reports and advice from friends like these: Song Ma, Dan Fandrich, Yang Tse, Jay Austin, Robert Iakobashvil, - James Housley, Daniel Black, Steve Little, Sonia Subramanian + James Housley, Daniel Black, Steve Little, Sonia Subramanian, Peter O'Gorman Thanks! (and sorry if I forgot to mention someone) diff --git a/lib/transfer.c b/lib/transfer.c index d007e881429b123baab6d28852efc1cc82f39252..760884e9b3e565678c0210d78f7e7e1f6da4a20d 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -270,7 +270,10 @@ CURLcode Curl_readrewind(struct connectdata *conn) static int data_pending(struct connectdata *conn) { - return Curl_ssl_data_pending(conn, FIRSTSOCKET); + /* in the case of libssh2, we can never be really sure that we have emptied + its internal buffers so we MUST always try until we get EAGAIN back */ + return conn->protocol&(PROT_SCP|PROT_SFTP) || + Curl_ssl_data_pending(conn, FIRSTSOCKET); } #ifndef MIN