diff options
author | Christian Schlack <christian@backhub.co> | 2016-04-26 18:04:03 +0200 |
---|---|---|
committer | Christian Schlack <christian@backhub.co> | 2016-04-26 18:04:03 +0200 |
commit | 4734c52ab2e5d8b77f2659282eefdbd7ebee4628 (patch) | |
tree | dc978bb2fd98db6fbe99ffb2ea3f20ddb7701ad0 | |
parent | cb2dfa46c8e12f60b20cdc80e1616c35d74c1b7e (diff) | |
download | libgit2-4734c52ab2e5d8b77f2659282eefdbd7ebee4628.tar.gz |
Fix return value of openssl_read (infinite loop)
openssl_read should return -1 in case of error.
SSL_read returns values <= 0 in case of error.
A return value of 0 can lead to an infinite loop, so the return value
of ssl_set_error will be returned if SSL_read is not successful (analog
to openssl_write).
-rw-r--r-- | src/openssl_stream.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/openssl_stream.c b/src/openssl_stream.c index edea8fef7..dd4cd6118 100644 --- a/src/openssl_stream.c +++ b/src/openssl_stream.c @@ -522,8 +522,9 @@ ssize_t openssl_read(git_stream *stream, void *data, size_t len) openssl_stream *st = (openssl_stream *) stream; int ret; - if ((ret = SSL_read(st->ssl, data, len)) <= 0) - ssl_set_error(st->ssl, ret); + if ((ret = SSL_read(st->ssl, data, len)) <= 0) { + return ssl_set_error(st->ssl, ret); + } return ret; } |