Skip to content

Commit ec79b0f

Browse files
committed
mbedtls: fix libgit2 hanging due to incomplete writes
1 parent 2419ccc commit ec79b0f

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

src/streams/mbedtls.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -345,16 +345,20 @@ static int mbedtls_set_proxy(git_stream *stream, const git_proxy_options *proxy_
345345

346346
ssize_t mbedtls_stream_write(git_stream *stream, const char *data, size_t len, int flags)
347347
{
348+
size_t read = 0;
348349
mbedtls_stream *st = (mbedtls_stream *) stream;
349-
int ret;
350350

351351
GIT_UNUSED(flags);
352352

353-
if ((ret = mbedtls_ssl_write(st->ssl, (const unsigned char *)data, len)) <= 0) {
354-
return ssl_set_error(st->ssl, ret);
355-
}
353+
do {
354+
int error = mbedtls_ssl_write(st->ssl, (const unsigned char *)data + read, len - read);
355+
if (error <= 0) {
356+
return ssl_set_error(st->ssl, error);
357+
}
358+
read += error;
359+
} while (read < len);
356360

357-
return ret;
361+
return read;
358362
}
359363

360364
ssize_t mbedtls_stream_read(git_stream *stream, void *data, size_t len)

0 commit comments

Comments
 (0)