From 6375dcb46db4bb05c9c19c980f3ed6d0ff9b1065 Mon Sep 17 00:00:00 2001 From: Azat Khuzhin Date: Sun, 14 May 2023 16:45:14 +0200 Subject: ssl: rename err_is_ok to handshake_is_ok (internal API) --- bufferevent_ssl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bufferevent_ssl.c') diff --git a/bufferevent_ssl.c b/bufferevent_ssl.c index 64c36ae6..847c8b67 100644 --- a/bufferevent_ssl.c +++ b/bufferevent_ssl.c @@ -706,7 +706,7 @@ do_handshake(struct bufferevent_ssl *bev_ssl) } bev_ssl->ssl_ops->decrement_buckets(bev_ssl); - if (bev_ssl->ssl_ops->err_is_ok(r)) { + if (bev_ssl->ssl_ops->handshake_is_ok(r)) { evutil_socket_t fd = event_get_fd(&bev_ssl->bev.bev.ev_read); /* We're done! */ bev_ssl->state = BUFFEREVENT_SSL_OPEN; -- cgit v1.2.1 From 7652cf4068f77905a56b9165455ec7e90917ec31 Mon Sep 17 00:00:00 2001 From: Azat Khuzhin Date: Sun, 14 May 2023 16:53:13 +0200 Subject: ssl: do not triger EOF if some data had been successfully read Previously in case when evbuffer_reserve_space() returns > 1, but it was able to read only 1 IO vector, it will try to read the next one, got 0 (EOF for mbedTLS or SSL_ERROR_ZERO_RETURN for OpenSSL) and will trigger EOF, while instead, it should trigger EV_READ w/o EOF and only after EOF. --- bufferevent_ssl.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'bufferevent_ssl.c') diff --git a/bufferevent_ssl.c b/bufferevent_ssl.c index 847c8b67..17046b82 100644 --- a/bufferevent_ssl.c +++ b/bufferevent_ssl.c @@ -284,7 +284,10 @@ do_read(struct bufferevent_ssl *bev_ssl, int n_to_read) { } else { int err = bev_ssl->ssl_ops->get_error(bev_ssl->ssl, r); bev_ssl->ssl_ops->print_err(err); - if (bev_ssl->ssl_ops->err_is_want_read(err)) { + if (bev_ssl->ssl_ops->err_is_ok(err) && result & OP_MADE_PROGRESS) { + /* Process existing data */ + break; + } else if (bev_ssl->ssl_ops->err_is_want_read(err)) { /* Can't read until underlying has more data. */ if (bev_ssl->read_blocked_on_write) if (clear_rbow(bev_ssl) < 0) -- cgit v1.2.1