summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Geoff Paul2012-01-12 01:33:17 +0100
committerGravatar Martin Szulecki2012-03-22 18:52:06 +0100
commitb83f925e58d4e8b89d042c0f375045a94bb0b202 (patch)
treea49c2ddae99ba603bf168623cfb9b4e6d2572b0d
parentaf0765f2fdb266f3bc08e2adf639b24aec8dee4b (diff)
downloadlibimobiledevice-b83f925e58d4e8b89d042c0f375045a94bb0b202.tar.gz
libimobiledevice-b83f925e58d4e8b89d042c0f375045a94bb0b202.tar.bz2
idevice: add error checking to internal_ssl_write()
Returning 0 bytes sent upon error causes an infinite loop within the calling gnutls code. Returning -1 as an error code allows gnutls to properly detect and recover.
-rw-r--r--src/idevice.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/idevice.c b/src/idevice.c
index cad1431..af87e61 100644
--- a/src/idevice.c
+++ b/src/idevice.c
@@ -504,9 +504,13 @@ static ssize_t internal_ssl_read(gnutls_transport_ptr_t transport, char *buffer,
static ssize_t internal_ssl_write(gnutls_transport_ptr_t transport, char *buffer, size_t length)
{
uint32_t bytes = 0;
+ idevice_error_t res;
idevice_connection_t connection = (idevice_connection_t)transport;
debug_info("pre-send length = %zi", length);
- internal_connection_send(connection, buffer, length, &bytes);
+ if ((res = internal_connection_send(connection, buffer, length, &bytes)) != IDEVICE_E_SUCCESS) {
+ debug_info("ERROR: internal_connection_send returned %d", res);
+ return -1;
+ }
debug_info("post-send sent %i bytes", bytes);
return bytes;
}