diff options
| author | Etienne Samson <samson.etienne@gmail.com> | 2018-03-29 22:14:04 +0200 |
|---|---|---|
| committer | Etienne Samson <samson.etienne@gmail.com> | 2018-04-11 21:02:43 +0200 |
| commit | ec79b0fdd6236647349a67010f1a8fdcc5edfae7 (patch) | |
| tree | 947ac8efd07f9d68ce03b32e86bfcee12ee8fa05 /src/streams | |
| parent | 2419cccd16ae6585e2b58360dc6a53304a3baee8 (diff) | |
| download | libgit2-ec79b0fdd6236647349a67010f1a8fdcc5edfae7.tar.gz | |
mbedtls: fix libgit2 hanging due to incomplete writes
Diffstat (limited to 'src/streams')
| -rw-r--r-- | src/streams/mbedtls.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/streams/mbedtls.c b/src/streams/mbedtls.c index 42ac8aa17..fa7d31e71 100644 --- a/src/streams/mbedtls.c +++ b/src/streams/mbedtls.c @@ -345,16 +345,20 @@ static int mbedtls_set_proxy(git_stream *stream, const git_proxy_options *proxy_ ssize_t mbedtls_stream_write(git_stream *stream, const char *data, size_t len, int flags) { + size_t read = 0; mbedtls_stream *st = (mbedtls_stream *) stream; - int ret; GIT_UNUSED(flags); - if ((ret = mbedtls_ssl_write(st->ssl, (const unsigned char *)data, len)) <= 0) { - return ssl_set_error(st->ssl, ret); - } + do { + int error = mbedtls_ssl_write(st->ssl, (const unsigned char *)data + read, len - read); + if (error <= 0) { + return ssl_set_error(st->ssl, error); + } + read += error; + } while (read < len); - return ret; + return read; } ssize_t mbedtls_stream_read(git_stream *stream, void *data, size_t len) |
