diff --git a/src/ssl.c b/src/ssl.c index 2ae379dc3..145e5a347 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -26150,14 +26150,26 @@ int wolfSSL_BIO_printf(WOLFSSL_BIO* bio, const char* format, ...) #if defined(OPENSSL_EXTRA) && !defined(_WIN32) case WOLFSSL_BIO_SSL: { + int count; char* pt = NULL; - ret = XVASPRINTF(&pt, format, args); - if (ret > 0 && pt != NULL) { - wolfSSL_BIO_write(bio, pt, ret); - } - if (pt != NULL) { - free(pt); + va_list copy; + + va_copy(copy, args); + count = vsnprintf(NULL, 0, format, args); + if (count >= 0) + { + pt = XMALLOC(count + 1, bio->heap, DYNAMIC_TYPE_TMP_BUFFER); + if (pt != NULL) + { + count = vsnprintf(pt, count + 1, format, copy); + if (count >= 0) + { + ret = wolfSSL_BIO_write(bio, pt, count); + } + XFREE(pt, bio->heap, DYNAMIC_TYPE_TMP_BUFFER); + } } + va_end(copy); } break; #endif diff --git a/wolfssl/wolfcrypt/types.h b/wolfssl/wolfcrypt/types.h index 04800a5f3..16d7bb01e 100644 --- a/wolfssl/wolfcrypt/types.h +++ b/wolfssl/wolfcrypt/types.h @@ -493,63 +493,6 @@ #endif /* _MSC_VER || __CYGWIN__ || __MINGW32__ */ #endif /* USE_WINDOWS_API */ - /* XVASPRINTF is used in ssl.c for wolfSSL_BIO_printf */ - #ifdef __GNUC__ - #define VASPRINTFCHECK __attribute__((format(printf, 2, 0))) - #else - #define VASPRINTFCHECK - #endif /* __GNUC__ */ - #if (defined(sun) || defined(__sun) || defined(_AIX)) - #include - VASPRINTFCHECK static WC_INLINE - int xvasprintf(char **ret, const char *format, va_list args) - { - int count; - char *buffer; - va_list copy; - va_copy(copy, args); - - *ret = NULL; - - count = vsnprintf(NULL, 0, format, args); - if (count >= 0) - { - buffer = malloc(count + 1); - if (buffer == NULL) - { - count = -1; - } - else - { - count = vsnprintf(buffer, count + 1, format, copy); - if (count < 0) - { - free(buffer); - count = -1; - } - else - { - *ret = buffer; - } - } - } - va_end(copy); - - return count; - } - #define XVASPRINTF xvasprintf - #else - #ifndef XVASPRINTF - #if defined(NO_FILESYSTEM) && (defined(OPENSSL_EXTRA) || \ - defined(HAVE_PKCS7)) && !defined(NO_STDIO_FILESYSTEM) - /* case where stdio is not included else where but is needed - for vasprintf */ - #include - #endif - #define XVASPRINTF vasprintf - #endif - #endif /* defined(sun) || defined(__sun) || defined(_AIX) */ - #if defined(WOLFSSL_CERT_EXT) || defined(HAVE_ALPN) /* use only Thread Safe version of strtok */ #if defined(USE_WOLF_STRTOK)