From 184a9dc67badcc7d6638e685d9eb3a613d3b9c39 Mon Sep 17 00:00:00 2001 From: Nikias Bassen Date: Wed, 20 Nov 2013 22:46:52 +0100 Subject: idevice: properly handle partial SSL_read()s --- src/idevice.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/idevice.c b/src/idevice.c index ec426e5..3ed2e9f 100644 --- a/src/idevice.c +++ b/src/idevice.c @@ -383,7 +383,15 @@ idevice_error_t idevice_connection_receive_timeout(idevice_connection_t connecti if (connection->ssl_data) { #ifdef HAVE_OPENSSL - int received = SSL_read(connection->ssl_data->session, (void*)data, (int)len); + uint32_t received = 0; + while (received < len) { + int r = SSL_read(connection->ssl_data->session, (void*)((char*)(data+received)), (int)len-received); + if (r > 0) { + received += r; + } else { + break; + } + } debug_info("SSL_read %d, received %d", len, received); #else ssize_t received = gnutls_record_recv(connection->ssl_data->session, (void*)data, (size_t)len); -- cgit v1.1-32-gdbae