diff --git a/src/bio.c b/src/bio.c index 1575657a9..2ce59d2fc 100644 --- a/src/bio.c +++ b/src/bio.c @@ -1552,12 +1552,18 @@ int wolfSSL_BIO_get_len(WOLFSSL_BIO *bio) WOLFSSL_ENTER("wolfSSL_BIO_get_len"); - if ((len = wolfSSL_BIO_pending(bio)) > 0) { + if (bio == NULL) { + WOLFSSL_MSG("WOLFSSL_BIO was null"); + len = BAD_FUNC_ARG; + } + else if ((len = wolfSSL_BIO_pending(bio)) > 0) { } #ifndef NO_FILESYSTEM else if (bio->type == WOLFSSL_BIO_FILE) { if (wolfSSL_BIO_get_fp(bio, &file) != WOLFSSL_SUCCESS) len = BAD_FUNC_ARG; + if (file == NULL) + len = WOLFSSL_BAD_FILE; if (len == 0) { curr = XFTELL(file); if (curr < 0) { diff --git a/tests/api.c b/tests/api.c index 7d64a7822..30d699f2d 100644 --- a/tests/api.c +++ b/tests/api.c @@ -46438,15 +46438,22 @@ static void test_wolfSSL_RSA_print(void) static void test_wolfSSL_BIO_get_len(void) { #if defined(OPENSSL_EXTRA) && !defined(NO_BIO) - BIO *bio; + BIO *bio = NULL; const char txt[] = "Some example text to push to the BIO."; printf(testingFmt, "wolfSSL_BIO_get_len"); + AssertIntEQ(wolfSSL_BIO_get_len(bio), BAD_FUNC_ARG); + AssertNotNull(bio = wolfSSL_BIO_new(wolfSSL_BIO_s_mem())); + AssertIntEQ(wolfSSL_BIO_write(bio, txt, sizeof(txt)), sizeof(txt)); AssertIntEQ(wolfSSL_BIO_get_len(bio), sizeof(txt)); - BIO_free(bio); + + AssertNotNull(bio = BIO_new_fd(STDOUT_FILENO, BIO_NOCLOSE)); + AssertIntEQ(wolfSSL_BIO_get_len(bio), WOLFSSL_BAD_FILE); + BIO_free(bio); + printf(resultFmt, passed); #endif }