diff options
author | Daniel Stenberg <daniel@haxx.se> | 2006-05-04 06:00:40 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2006-05-04 06:00:40 +0000 |
commit | 758f6eed5169f20635c410077b840c1ffb741ddb (patch) | |
tree | 21f4ecfc8c79c10bd12b2bc7f09399fc30376298 | |
parent | 80ee5d3bd82343dc7064e6754032690d8b6887b2 (diff) |
Mark Eichin submitted bug report #1480821
(http://curl.haxx.se/bug/view.cgi?id=1480821) He found and identified a
problem with how libcurl dealt with GnuTLS and a case where gnutls returned
GNUTLS_E_AGAIN indicating it would block. It would then return an unexpected
return code, making Curl_ssl_send() confuse the upper layer - causing random
28 bytes trash data to get inserted in the transfered stream.
The proper fix was to make the Curl_gtls_send() function return the proper
return codes that the callers would expect. The Curl_ossl_send() function
already did this.
-rw-r--r-- | CHANGES | 12 | ||||
-rw-r--r-- | RELEASE-NOTES | 3 | ||||
-rw-r--r-- | lib/gtls.c | 6 |
3 files changed, 20 insertions, 1 deletions
@@ -6,6 +6,18 @@ Changelog +Daniel (4 May 2006) +- Mark Eichin submitted bug report #1480821 + (http://curl.haxx.se/bug/view.cgi?id=1480821) He found and identified a + problem with how libcurl dealt with GnuTLS and a case where gnutls returned + GNUTLS_E_AGAIN indicating it would block. It would then return an unexpected + return code, making Curl_ssl_send() confuse the upper layer - causing random + 28 bytes trash data to get inserted in the transfered stream. + + The proper fix was to make the Curl_gtls_send() function return the proper + return codes that the callers would expect. The Curl_ossl_send() function + already did this. + Daniel (2 May 2006) - Added a --checkfor option to curl-config to allow users to easier write for example shell scripts that test for the presence of a diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 810ffda92..1fe83f38c 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -20,6 +20,7 @@ This release includes the following changes: This release includes the following bugfixes: + o GnuTLS non-block case that could cause data trashing o deflate code survives lack of zlib header o CURLOPT_INTERFACE works with hostname o configure runs fine with ICC @@ -46,6 +47,6 @@ advice from friends like these: Dan Fandrich, Ilja van Sprundel, David McCreedy, Tor Arntsen, Xavier Bouchoux, David Byron, Michele Bini, Ates Goral, Katie Wang, Robson Braga Araujo, - Ale Vesely, Paul Querna, Gisle Vanem + Ale Vesely, Paul Querna, Gisle Vanem, Mark Eichin Thanks! (and sorry if I forgot to mention someone) diff --git a/lib/gtls.c b/lib/gtls.c index 5d3959cce..4cf78080b 100644 --- a/lib/gtls.c +++ b/lib/gtls.c @@ -458,6 +458,12 @@ int Curl_gtls_send(struct connectdata *conn, int rc; rc = gnutls_record_send(conn->ssl[sockindex].session, mem, len); + if(rc < 0 ) { + if(rc == GNUTLS_E_AGAIN) + return 0; /* EWOULDBLOCK equivalent */ + rc = -1; /* generic error code for send failure */ + } + return rc; } |