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