mirror of
https://git.proxmox.com/git/libgit2
synced 2025-08-07 15:37:46 +00:00
openssl: don't try to handle WANT_READ or WANT_WRITE
We use a blocking socket and set the mode to AUTO_RETRY which means that `SSL_write` and `SSL_read` will only return once the read or write has been completed. We therefore don't need to handle partial writes or re-try read due to a regenotiation. While here, consider that a zero also indicates an error condition.
This commit is contained in:
parent
9cdd657887
commit
77bffc2cd6
@ -287,19 +287,14 @@ ssize_t openssl_write(git_stream *stream, const char *data, size_t len, int flag
|
|||||||
{
|
{
|
||||||
openssl_stream *st = (openssl_stream *) stream;
|
openssl_stream *st = (openssl_stream *) stream;
|
||||||
int ret;
|
int ret;
|
||||||
size_t off = 0;
|
|
||||||
|
|
||||||
GIT_UNUSED(flags);
|
GIT_UNUSED(flags);
|
||||||
|
|
||||||
while (off < len) {
|
if ((ret = SSL_write(st->ssl, data, len)) <= 0) {
|
||||||
ret = SSL_write(st->ssl, data + off, len - off);
|
return ssl_set_error(st->ssl, ret);
|
||||||
if (ret <= 0 && ret != SSL_ERROR_WANT_WRITE)
|
|
||||||
return ssl_set_error(st->ssl, ret);
|
|
||||||
|
|
||||||
off += ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return off;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t openssl_read(git_stream *stream, void *data, size_t len)
|
ssize_t openssl_read(git_stream *stream, void *data, size_t len)
|
||||||
@ -307,14 +302,8 @@ ssize_t openssl_read(git_stream *stream, void *data, size_t len)
|
|||||||
openssl_stream *st = (openssl_stream *) stream;
|
openssl_stream *st = (openssl_stream *) stream;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
do {
|
if ((ret = SSL_read(st->ssl, data, len)) <= 0)
|
||||||
ret = SSL_read(st->ssl, data, len);
|
|
||||||
} while (SSL_get_error(st->ssl, ret) == SSL_ERROR_WANT_READ);
|
|
||||||
|
|
||||||
if (ret < 0) {
|
|
||||||
ssl_set_error(st->ssl, ret);
|
ssl_set_error(st->ssl, ret);
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user