BIO_set_nbio() should always return 1, check input bio for NULL before using

This commit is contained in:
Chris Conlon
2021-08-20 14:00:33 -06:00
committed by Hayden Roche
parent 9bd300e07d
commit f6b91f04ed

View File

@@ -1660,38 +1660,43 @@ void* wolfSSL_BIO_get_data(WOLFSSL_BIO* bio)
*/
long wolfSSL_BIO_set_nbio(WOLFSSL_BIO* bio, long on)
{
int ret = 0;
#ifndef WOLFSSL_DTLS
(void)on;
#endif
WOLFSSL_ENTER("wolfSSL_BIO_set_nbio");
switch (bio->type) {
case WOLFSSL_BIO_SOCKET:
#ifdef XFCNTL
{
int flag = XFCNTL(bio->num, F_GETFL, 0);
if (on)
ret = XFCNTL(bio->num, F_SETFL, flag | O_NONBLOCK);
else
ret = XFCNTL(bio->num, F_SETFL, flag & ~O_NONBLOCK);
}
#endif
break;
case WOLFSSL_BIO_SSL:
#ifdef WOLFSSL_DTLS
wolfSSL_dtls_set_using_nonblock((WOLFSSL*)bio->ptr, (int)on);
#endif
break;
if (bio) {
switch (bio->type) {
case WOLFSSL_BIO_SOCKET:
#ifdef XFCNTL
{
int ret = 0;
int flag = XFCNTL(bio->num, F_GETFL, 0);
if (on) {
ret = XFCNTL(bio->num, F_SETFL, flag | O_NONBLOCK);
} else {
ret = XFCNTL(bio->num, F_SETFL, flag & ~O_NONBLOCK);
}
default:
WOLFSSL_MSG("Unsupported bio type for non blocking");
break;
if (ret == -1) {
WOLFSSL_MSG("Call to XFCNTL failed");
}
}
#endif
break;
case WOLFSSL_BIO_SSL:
#ifdef WOLFSSL_DTLS
wolfSSL_dtls_set_using_nonblock((WOLFSSL*)bio->ptr, (int)on);
#endif
break;
default:
WOLFSSL_MSG("Unsupported bio type for non blocking");
break;
}
}
if (ret != -1)
return 1;
else
return 0;
return 1;
}