Only override context read/write funcs on SSL_connect success.

Fixes #1233
This commit is contained in:
michael-grunder 2024-04-02 12:52:50 -07:00 committed by Michael Grunder
parent 2a7b8fac96
commit 19cfd60d92

7
ssl.c
View File

@ -364,7 +364,6 @@ static int redisSSLConnect(redisContext *c, SSL *ssl) {
return REDIS_ERR;
}
c->funcs = &redisContextSSLFuncs;
rssl->ssl = ssl;
SSL_set_mode(rssl->ssl, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER);
@ -372,15 +371,19 @@ static int redisSSLConnect(redisContext *c, SSL *ssl) {
SSL_set_connect_state(rssl->ssl);
ERR_clear_error();
int rv = SSL_connect(rssl->ssl);
if (rv == 1) {
c->funcs = &redisContextSSLFuncs;
c->privctx = rssl;
return REDIS_OK;
}
rv = SSL_get_error(rssl->ssl, rv);
if (((c->flags & REDIS_BLOCK) == 0) &&
(rv == SSL_ERROR_WANT_READ || rv == SSL_ERROR_WANT_WRITE)) {
(rv == SSL_ERROR_WANT_READ || rv == SSL_ERROR_WANT_WRITE))
{
c->funcs = &redisContextSSLFuncs;
c->privctx = rssl;
return REDIS_OK;
}