From 758f6eed5169f20635c410077b840c1ffb741ddb Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Thu, 4 May 2006 06:00:40 +0000 Subject: 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. --- lib/gtls.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'lib') 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; } -- cgit v1.2.3