From 84b5d6613d8ab8dbbebc51091325b3e523f34035 Mon Sep 17 00:00:00 2001 From: David Garske Date: Tue, 29 Oct 2024 11:50:24 -0700 Subject: [PATCH 1/4] More fixes for building x86 in Visual Studio for non-windows OS (Watcom C compiler). Followup to PR #7884. Fixes ZD 18465 * Consolidate the USE_WINDOWS_API to a single place. * Expand the `WOLFSSL_NOT_WINDOWS_API` improvement for intrinsics and word sizes. * Fix for macro variadic `...` when no variables are used (some compilers like Watcom C have issue with this). * Fix for Watcom C compiler "long long" -> "__int64". * Fix a couple of minor cast warnings reported from VS. --- src/ocsp.c | 6 ++++-- src/ssl_asn1.c | 4 ++-- src/tls.c | 10 +++++----- src/x509.c | 4 ++-- wolfcrypt/src/wc_port.c | 3 ++- wolfssl/wolfcrypt/logging.h | 2 +- wolfssl/wolfcrypt/settings.h | 7 +++++-- wolfssl/wolfcrypt/sp_int.h | 21 +++++++++++++++++---- wolfssl/wolfcrypt/types.h | 23 ++++++++++------------- wolfssl/wolfcrypt/wc_port.h | 7 ++++--- 10 files changed, 52 insertions(+), 35 deletions(-) diff --git a/src/ocsp.c b/src/ocsp.c index 493d8268f7..8b93c1748a 100644 --- a/src/ocsp.c +++ b/src/ocsp.c @@ -1634,7 +1634,8 @@ int wolfSSL_OCSP_REQ_CTX_nbio(WOLFSSL_OCSP_REQ_CTX *ctx) case ORIOS_WRITE: { const unsigned char *req; - int reqLen = wolfSSL_BIO_get_mem_data(ctx->reqResp, &req); + int reqLen = wolfSSL_BIO_get_mem_data(ctx->reqResp, + (unsigned char*)&req); if (reqLen <= 0) { WOLFSSL_MSG("wolfSSL_BIO_get_mem_data error"); return WOLFSSL_FAILURE; @@ -1710,7 +1711,8 @@ int wolfSSL_OCSP_sendreq_nbio(OcspResponse **presp, WOLFSSL_OCSP_REQ_CTX *ctx) if (ret != WOLFSSL_SUCCESS) return ret; - len = wolfSSL_BIO_get_mem_data(ctx->reqResp, &resp); + len = wolfSSL_BIO_get_mem_data(ctx->reqResp, + (unsigned char*)&resp); if (len <= 0) return WOLFSSL_FAILURE; return wolfSSL_d2i_OCSP_RESPONSE(presp, &resp, len) != NULL diff --git a/src/ssl_asn1.c b/src/ssl_asn1.c index 95f9cca156..2c21726e4a 100644 --- a/src/ssl_asn1.c +++ b/src/ssl_asn1.c @@ -456,7 +456,7 @@ static void* d2i_obj(const WOLFSSL_ASN1_TEMPLATE* mem, const byte** src, mem->free_func(ret); /* never a stack so we can call this directly */ return NULL; } - *len -= (tmp - *src); + *len -= (long)(tmp - *src); *src = tmp; return ret; } @@ -586,7 +586,7 @@ static void* d2i_generic(const WOLFSSL_ASN1_TEMPLATE* mem, WOLFSSL_MSG("ptr not advanced enough"); goto error; } - *len -= tmp - *src; + *len -= (long)(tmp - *src); *src = tmp; return ret; error: diff --git a/src/tls.c b/src/tls.c index 8441acf522..a85ce19223 100644 --- a/src/tls.c +++ b/src/tls.c @@ -7174,9 +7174,9 @@ static int TLSX_CA_Names_Parse(WOLFSSL *ssl, const byte* input, #else -#define CAN_GET_SIZE(...) 0 -#define CAN_WRITE(...) 0 -#define CAN_PARSE(...) 0 +#define CAN_GET_SIZE() 0 +#define CAN_WRITE() 0 +#define CAN_PARSE() 0 #endif @@ -14764,7 +14764,7 @@ static word16 TLSX_GetMinSize_Client(word16* type) } #define TLSX_GET_MIN_SIZE_CLIENT TLSX_GetMinSize_Client #else - #define TLSX_GET_MIN_SIZE_CLIENT(...) 0 + #define TLSX_GET_MIN_SIZE_CLIENT() 0 #endif @@ -14833,7 +14833,7 @@ static word16 TLSX_GetMinSize_Server(const word16 *type) } #define TLSX_GET_MIN_SIZE_SERVER TLSX_GetMinSize_Server #else - #define TLSX_GET_MIN_SIZE_SERVER(...) 0 + #define TLSX_GET_MIN_SIZE_SERVER() 0 #endif diff --git a/src/x509.c b/src/x509.c index 18feff0225..c74ccd1288 100644 --- a/src/x509.c +++ b/src/x509.c @@ -5926,8 +5926,8 @@ static int X509PrintDirType(char * dst, int max_len, const DNS_entry * entry) /* Copy it in, decrement available space. */ XSTRNCPY(dst, pfx, bytes_left); dst += XSTRLEN(pfx); - total_len += XSTRLEN(pfx); - bytes_left -= XSTRLEN(pfx); + total_len += (int)XSTRLEN(pfx); + bytes_left -= (int)XSTRLEN(pfx); if (fld_len > bytes_left) { /* Not enough space left. */ diff --git a/wolfcrypt/src/wc_port.c b/wolfcrypt/src/wc_port.c index 7fe2d35ab1..b8b6221a0b 100644 --- a/wolfcrypt/src/wc_port.c +++ b/wolfcrypt/src/wc_port.c @@ -3604,7 +3604,8 @@ time_t stm32_hal_time(time_t *t1) #endif /* !NO_ASN_TIME */ -#if !defined(WOLFSSL_LEANPSK) && !defined(STRING_USER) +#if (!defined(WOLFSSL_LEANPSK) && !defined(STRING_USER)) || \ + defined(USE_WOLF_STRNSTR) char* mystrnstr(const char* s1, const char* s2, unsigned int n) { unsigned int s2_len = (unsigned int)XSTRLEN(s2); diff --git a/wolfssl/wolfcrypt/logging.h b/wolfssl/wolfcrypt/logging.h index 7d349fecea..3d3e923bd3 100644 --- a/wolfssl/wolfcrypt/logging.h +++ b/wolfssl/wolfcrypt/logging.h @@ -178,7 +178,7 @@ WOLFSSL_API void wolfSSL_SetLoggingPrefix(const char* prefix); WOLFSSL_API void WOLFSSL_MSG_EX(const char* fmt, ...); #define HAVE_WOLFSSL_MSG_EX #else - #define WOLFSSL_MSG_EX(...) WC_DO_NOTHING + #define WOLFSSL_MSG_EX() WC_DO_NOTHING #endif WOLFSSL_API void WOLFSSL_MSG(const char* msg); #ifdef WOLFSSL_DEBUG_CODEPOINTS diff --git a/wolfssl/wolfcrypt/settings.h b/wolfssl/wolfcrypt/settings.h index e02870c13b..00670120fe 100644 --- a/wolfssl/wolfcrypt/settings.h +++ b/wolfssl/wolfcrypt/settings.h @@ -1358,10 +1358,13 @@ #define NO_SESSION_CACHE #endif -/* Micrium will use Visual Studio for compilation but not the Win32 API */ +/* For platforms where the target OS is not Windows, but compilation is + * done on Windows/Visual Studio, enable a way to disable USE_WINDOWS_API. + * Examples: Micrium, TenAsus INtime, uTasker, FreeRTOS simulator */ #if defined(_WIN32) && !defined(MICRIUM) && !defined(FREERTOS) && \ !defined(FREERTOS_TCP) && !defined(EBSNET) && !defined(WOLFSSL_EROAD) && \ - !defined(WOLFSSL_UTASKER) && !defined(INTIME_RTOS) + !defined(WOLFSSL_UTASKER) && !defined(INTIME_RTOS) && \ + !defined(WOLFSSL_NOT_WINDOWS_API) #define USE_WINDOWS_API #endif diff --git a/wolfssl/wolfcrypt/sp_int.h b/wolfssl/wolfcrypt/sp_int.h index 2a9a88014a..061bacb82c 100644 --- a/wolfssl/wolfcrypt/sp_int.h +++ b/wolfssl/wolfcrypt/sp_int.h @@ -30,8 +30,9 @@ This library provides single precision (SP) integer math functions. #ifndef WOLFSSL_LINUXKM #include #endif -#include -#include +#include +#include +#include #ifdef __cplusplus extern "C" { @@ -100,6 +101,15 @@ extern "C" { #error "Size of unsigned int not detected" #endif +#if defined(__WATCOMC__) && defined(__WATCOM_INT64__) + /* For older Watcom C compiler force types */ + #define SP_ULLONG_BITS 64 + typedef unsigned __int64 sp_uint64; + typedef __int64 sp_int64; + +#else + +/* 32-bit type */ #if defined(WOLF_C89) && !defined(NO_64BIT) && \ ULONG_MAX == 18446744073709551615UL #define SP_ULONG_BITS 64 @@ -108,8 +118,8 @@ extern "C" { typedef long sp_int64; #elif !defined(WOLF_C89) && !defined(NO_64BIT) && \ ULONG_MAX == 18446744073709551615ULL && \ - 4294967295UL != 18446744073709551615ULL /* verify pre-processor supports - * 64-bit ULL types */ + /* sanity check pre-processor supports 64-bit ULL types */ \ + 4294967295UL != 18446744073709551615ULL #define SP_ULONG_BITS 64 typedef unsigned long sp_uint64; @@ -132,6 +142,7 @@ extern "C" { #error "Size of unsigned long not detected" #endif +/* 64-bit type */ #ifdef ULLONG_MAX #if defined(WOLF_C89) && ULLONG_MAX == 18446744073709551615UL #define SP_ULLONG_BITS 64 @@ -165,6 +176,7 @@ extern "C" { #error "Size of unsigned long long not detected" #endif #elif (SP_ULONG_BITS == 32) && !defined(NO_64BIT) + #define SP_ULLONG_BITS 64 /* Speculatively use long long as the 64-bit type as we don't have one * otherwise. */ typedef unsigned long long sp_uint64; @@ -173,6 +185,7 @@ extern "C" { #define SP_ULLONG_BITS 0 #endif +#endif /* __WATCOMC__ */ #ifdef WOLFSSL_SP_DIV_32 #define WOLFSSL_SP_DIV_WORD_HALF diff --git a/wolfssl/wolfcrypt/types.h b/wolfssl/wolfcrypt/types.h index 1b437c1000..5720869dea 100644 --- a/wolfssl/wolfcrypt/types.h +++ b/wolfssl/wolfcrypt/types.h @@ -182,7 +182,10 @@ decouple library dependencies with standard string, memory and so on. #endif #endif - #if defined(_MSC_VER) || defined(__BCPLUSPLUS__) + #if (defined(_MSC_VER) && !defined(WOLFSSL_NOT_WINDOWS_API)) || \ + defined(__BCPLUSPLUS__) || \ + (defined(__WATCOMC__) && defined(__WATCOM_INT64__)) + /* windows types */ #define WORD64_AVAILABLE #define W64LIT(x) x##ui64 #define SW64LIT(x) x##i64 @@ -379,8 +382,8 @@ typedef struct w64wrapper { #endif /* set up rotate style */ - #if (defined(_MSC_VER) || defined(__BCPLUSPLUS__)) && \ - !defined(WOLFSSL_SGX) && !defined(INTIME_RTOS) + #if ((defined(_MSC_VER) && !defined(WOLFSSL_NOT_WINDOWS_API)) || \ + defined(__BCPLUSPLUS__)) && !defined(WOLFSSL_SGX) && !defined(INTIME_RTOS) #define INTEL_INTRINSICS #define FAST_ROTATE #elif defined(__MWERKS__) && TARGET_CPU_PPC @@ -428,16 +431,6 @@ typedef struct w64wrapper { #define FALL_THROUGH #endif - /* For platforms where the target OS is not Windows, but compilation is - * done on Windows/Visual Studio, enable a way to disable USE_WINDOWS_API. - * Examples: Micrium, TenAsus INtime, uTasker, FreeRTOS simulator */ - #if defined(_WIN32) && !defined(MICRIUM) && !defined(FREERTOS) && \ - !defined(FREERTOS_TCP) && !defined(EBSNET) && \ - !defined(WOLFSSL_UTASKER) && !defined(INTIME_RTOS) && \ - !defined(WOLFSSL_NOT_WINDOWS_API) - #define USE_WINDOWS_API - #endif - #define XSTR_SIZEOF(x) (sizeof(x) - 1) /* -1 to not count the null char */ #define XELEM_CNT(x) (sizeof((x))/sizeof(*(x))) @@ -1757,7 +1750,11 @@ typedef struct w64wrapper { #endif #ifndef SAVE_VECTOR_REGISTERS + #ifdef __WATCOMC__ + #define SAVE_VECTOR_REGISTERS() WC_DO_NOTHING + #else #define SAVE_VECTOR_REGISTERS(...) WC_DO_NOTHING + #endif #endif #ifndef SAVE_VECTOR_REGISTERS2 #define SAVE_VECTOR_REGISTERS2() 0 diff --git a/wolfssl/wolfcrypt/wc_port.h b/wolfssl/wolfcrypt/wc_port.h index 6dc7d2c92b..eec259ecba 100644 --- a/wolfssl/wolfcrypt/wc_port.h +++ b/wolfssl/wolfcrypt/wc_port.h @@ -75,7 +75,7 @@ #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif - #ifndef WOLFSSL_SGX + #if !defined(WOLFSSL_SGX) && !defined(WOLFSSL_NOT_WINDOWS_API) #if defined(_WIN32_WCE) || defined(WIN32_LEAN_AND_MEAN) /* On WinCE winsock2.h must be included before windows.h */ #include @@ -346,7 +346,7 @@ #define WOLFSSL_ATOMIC_OPS #endif /* WOLFSSL_HAVE_ATOMIC_H */ #endif -#elif defined(_MSC_VER) +#elif defined(_MSC_VER) && !defined(WOLFSSL_NOT_WINDOWS_API) /* Use MSVC compiler intrinsics for atomic ops */ #ifdef _WIN32_WCE #include @@ -1273,7 +1273,8 @@ WOLFSSL_ABI WOLFSSL_API int wolfCrypt_Cleanup(void); #endif /* !NO_ASN_TIME */ -#ifndef WOLFSSL_LEANPSK +#if (!defined(WOLFSSL_LEANPSK) && !defined(STRING_USER)) || \ + defined(USE_WOLF_STRNSTR) char* mystrnstr(const char* s1, const char* s2, unsigned int n); #endif From 99daac3974b2404fddc3e817b6c8fd92fc4d8380 Mon Sep 17 00:00:00 2001 From: David Garske Date: Fri, 1 Nov 2024 13:57:02 -0700 Subject: [PATCH 2/4] Improvement for `SAVE_VECTOR_REGISTERS` --- wolfcrypt/src/curve25519.c | 2 +- wolfcrypt/src/dh.c | 2 +- wolfcrypt/src/dsa.c | 2 +- wolfcrypt/src/ecc.c | 2 +- wolfcrypt/src/eccsi.c | 2 +- wolfcrypt/src/rsa.c | 2 +- wolfcrypt/src/sakke.c | 2 +- wolfcrypt/src/sp_int.c | 2 +- wolfssl/wolfcrypt/types.h | 10 +++------- 9 files changed, 11 insertions(+), 15 deletions(-) diff --git a/wolfcrypt/src/curve25519.c b/wolfcrypt/src/curve25519.c index 7641055b44..8f409dafaa 100644 --- a/wolfcrypt/src/curve25519.c +++ b/wolfcrypt/src/curve25519.c @@ -54,7 +54,7 @@ #if defined(WOLFSSL_LINUXKM) && !defined(USE_INTEL_SPEEDUP) /* force off unneeded vector register save/restore. */ #undef SAVE_VECTOR_REGISTERS - #define SAVE_VECTOR_REGISTERS(...) WC_DO_NOTHING + #define SAVE_VECTOR_REGISTERS(fail_clause) WC_DO_NOTHING #undef RESTORE_VECTOR_REGISTERS #define RESTORE_VECTOR_REGISTERS() WC_DO_NOTHING #endif diff --git a/wolfcrypt/src/dh.c b/wolfcrypt/src/dh.c index 610b4b69db..5258e820e4 100644 --- a/wolfcrypt/src/dh.c +++ b/wolfcrypt/src/dh.c @@ -67,7 +67,7 @@ #if defined(WOLFSSL_LINUXKM) && !defined(WOLFSSL_SP_ASM) /* force off unneeded vector register save/restore. */ #undef SAVE_VECTOR_REGISTERS - #define SAVE_VECTOR_REGISTERS(...) WC_DO_NOTHING + #define SAVE_VECTOR_REGISTERS(fail_clause) WC_DO_NOTHING #undef RESTORE_VECTOR_REGISTERS #define RESTORE_VECTOR_REGISTERS() WC_DO_NOTHING #endif diff --git a/wolfcrypt/src/dsa.c b/wolfcrypt/src/dsa.c index 6ed4435fdd..1be1450a8d 100644 --- a/wolfcrypt/src/dsa.c +++ b/wolfcrypt/src/dsa.c @@ -45,7 +45,7 @@ #if defined(WOLFSSL_LINUXKM) && !defined(WOLFSSL_SP_ASM) /* force off unneeded vector register save/restore. */ #undef SAVE_VECTOR_REGISTERS - #define SAVE_VECTOR_REGISTERS(...) WC_DO_NOTHING + #define SAVE_VECTOR_REGISTERS(fail_clause) WC_DO_NOTHING #undef RESTORE_VECTOR_REGISTERS #define RESTORE_VECTOR_REGISTERS() WC_DO_NOTHING #endif diff --git a/wolfcrypt/src/ecc.c b/wolfcrypt/src/ecc.c index da6505cc6b..5476e1494d 100644 --- a/wolfcrypt/src/ecc.c +++ b/wolfcrypt/src/ecc.c @@ -231,7 +231,7 @@ ECC Curve Sizes: #if defined(WOLFSSL_LINUXKM) && !defined(WOLFSSL_SP_ASM) /* force off unneeded vector register save/restore. */ #undef SAVE_VECTOR_REGISTERS - #define SAVE_VECTOR_REGISTERS(...) WC_DO_NOTHING + #define SAVE_VECTOR_REGISTERS(fail_clause) WC_DO_NOTHING #undef RESTORE_VECTOR_REGISTERS #define RESTORE_VECTOR_REGISTERS() WC_DO_NOTHING #endif diff --git a/wolfcrypt/src/eccsi.c b/wolfcrypt/src/eccsi.c index 2be700fcb4..79b7a65a38 100644 --- a/wolfcrypt/src/eccsi.c +++ b/wolfcrypt/src/eccsi.c @@ -46,7 +46,7 @@ #if defined(WOLFSSL_LINUXKM) && !defined(WOLFSSL_SP_ASM) /* force off unneeded vector register save/restore. */ #undef SAVE_VECTOR_REGISTERS - #define SAVE_VECTOR_REGISTERS(...) WC_DO_NOTHING + #define SAVE_VECTOR_REGISTERS(fail_clause) WC_DO_NOTHING #undef RESTORE_VECTOR_REGISTERS #define RESTORE_VECTOR_REGISTERS() WC_DO_NOTHING #endif diff --git a/wolfcrypt/src/rsa.c b/wolfcrypt/src/rsa.c index 9e34599caf..8c225ea5aa 100644 --- a/wolfcrypt/src/rsa.c +++ b/wolfcrypt/src/rsa.c @@ -63,7 +63,7 @@ RSA keys can be used to encrypt, decrypt, sign and verify data. #if defined(WOLFSSL_LINUXKM) && !defined(WOLFSSL_SP_ASM) /* force off unneeded vector register save/restore. */ #undef SAVE_VECTOR_REGISTERS - #define SAVE_VECTOR_REGISTERS(...) WC_DO_NOTHING + #define SAVE_VECTOR_REGISTERS(fail_clause) WC_DO_NOTHING #undef RESTORE_VECTOR_REGISTERS #define RESTORE_VECTOR_REGISTERS() WC_DO_NOTHING #endif diff --git a/wolfcrypt/src/sakke.c b/wolfcrypt/src/sakke.c index 962299f340..fab1067349 100644 --- a/wolfcrypt/src/sakke.c +++ b/wolfcrypt/src/sakke.c @@ -47,7 +47,7 @@ #if defined(WOLFSSL_LINUXKM) && !defined(WOLFSSL_SP_ASM) /* force off unneeded vector register save/restore. */ #undef SAVE_VECTOR_REGISTERS - #define SAVE_VECTOR_REGISTERS(...) WC_DO_NOTHING + #define SAVE_VECTOR_REGISTERS(fail_clause) WC_DO_NOTHING #undef RESTORE_VECTOR_REGISTERS #define RESTORE_VECTOR_REGISTERS() WC_DO_NOTHING #endif diff --git a/wolfcrypt/src/sp_int.c b/wolfcrypt/src/sp_int.c index d9ac60bca0..6bb4e36266 100644 --- a/wolfcrypt/src/sp_int.c +++ b/wolfcrypt/src/sp_int.c @@ -119,7 +119,7 @@ This library provides single precision (SP) integer math functions. #if defined(WOLFSSL_LINUXKM) && !defined(WOLFSSL_SP_ASM) /* force off unneeded vector register save/restore. */ #undef SAVE_VECTOR_REGISTERS - #define SAVE_VECTOR_REGISTERS(...) WC_DO_NOTHING + #define SAVE_VECTOR_REGISTERS(fail_clause) WC_DO_NOTHING #undef RESTORE_VECTOR_REGISTERS #define RESTORE_VECTOR_REGISTERS() WC_DO_NOTHING #endif diff --git a/wolfssl/wolfcrypt/types.h b/wolfssl/wolfcrypt/types.h index 5720869dea..56905a0f6d 100644 --- a/wolfssl/wolfcrypt/types.h +++ b/wolfssl/wolfcrypt/types.h @@ -1750,11 +1750,7 @@ typedef struct w64wrapper { #endif #ifndef SAVE_VECTOR_REGISTERS - #ifdef __WATCOMC__ - #define SAVE_VECTOR_REGISTERS() WC_DO_NOTHING - #else - #define SAVE_VECTOR_REGISTERS(...) WC_DO_NOTHING - #endif + #define SAVE_VECTOR_REGISTERS(fail_clause) WC_DO_NOTHING #endif #ifndef SAVE_VECTOR_REGISTERS2 #define SAVE_VECTOR_REGISTERS2() 0 @@ -1768,10 +1764,10 @@ typedef struct w64wrapper { #define WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(x) WC_DO_NOTHING #endif #ifndef ASSERT_SAVED_VECTOR_REGISTERS - #define ASSERT_SAVED_VECTOR_REGISTERS(...) WC_DO_NOTHING + #define ASSERT_SAVED_VECTOR_REGISTERS(fail_clause) WC_DO_NOTHING #endif #ifndef ASSERT_RESTORED_VECTOR_REGISTERS - #define ASSERT_RESTORED_VECTOR_REGISTERS(...) WC_DO_NOTHING + #define ASSERT_RESTORED_VECTOR_REGISTERS(fail_clause) WC_DO_NOTHING #endif #ifndef RESTORE_VECTOR_REGISTERS #define RESTORE_VECTOR_REGISTERS() WC_DO_NOTHING From 671f93135bf6bb5b8a1d9e9922fe86a79b396bb0 Mon Sep 17 00:00:00 2001 From: David Garske Date: Fri, 1 Nov 2024 14:24:30 -0700 Subject: [PATCH 3/4] Fixes for consistency in `ASSERT_SAVED_VECTOR_REGISTERS` and `RESTORE_VECTOR_REGISTERS`. --- wolfssl/wolfcrypt/memory.h | 5 ++--- wolfssl/wolfcrypt/types.h | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/wolfssl/wolfcrypt/memory.h b/wolfssl/wolfcrypt/memory.h index 481f8aa796..9175f966c1 100644 --- a/wolfssl/wolfcrypt/memory.h +++ b/wolfssl/wolfcrypt/memory.h @@ -449,7 +449,7 @@ WOLFSSL_LOCAL int wc_debug_CipherLifecycleFree(void **CipherLifecycleTag, #endif - #define ASSERT_SAVED_VECTOR_REGISTERS(fail_clause) do { \ + #define ASSERT_SAVED_VECTOR_REGISTERS() do { \ if (wc_svr_count <= 0) { \ fprintf(stderr, \ ("ASSERT_SAVED_VECTOR_REGISTERS : %s @ L%d : " \ @@ -460,7 +460,6 @@ WOLFSSL_LOCAL int wc_debug_CipherLifecycleFree(void **CipherLifecycleTag, wc_svr_last_file, \ wc_svr_last_line); \ DEBUG_VECTOR_REGISTERS_EXTRA_FAIL_CLAUSE \ - { fail_clause } \ } \ } while (0) #define ASSERT_RESTORED_VECTOR_REGISTERS(fail_clause) do { \ @@ -477,7 +476,7 @@ WOLFSSL_LOCAL int wc_debug_CipherLifecycleFree(void **CipherLifecycleTag, { fail_clause } \ } \ } while (0) - #define RESTORE_VECTOR_REGISTERS(...) do { \ + #define RESTORE_VECTOR_REGISTERS() do { \ --wc_svr_count; \ if ((wc_svr_count > 4) || (wc_svr_count < 0)) { \ fprintf(stderr, \ diff --git a/wolfssl/wolfcrypt/types.h b/wolfssl/wolfcrypt/types.h index 56905a0f6d..da87e27273 100644 --- a/wolfssl/wolfcrypt/types.h +++ b/wolfssl/wolfcrypt/types.h @@ -1764,7 +1764,7 @@ typedef struct w64wrapper { #define WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(x) WC_DO_NOTHING #endif #ifndef ASSERT_SAVED_VECTOR_REGISTERS - #define ASSERT_SAVED_VECTOR_REGISTERS(fail_clause) WC_DO_NOTHING + #define ASSERT_SAVED_VECTOR_REGISTERS() WC_DO_NOTHING #endif #ifndef ASSERT_RESTORED_VECTOR_REGISTERS #define ASSERT_RESTORED_VECTOR_REGISTERS(fail_clause) WC_DO_NOTHING From aad0f6e08d132cc6476b9d00b5187108cc64b8e6 Mon Sep 17 00:00:00 2001 From: David Garske Date: Mon, 4 Nov 2024 11:15:00 -0800 Subject: [PATCH 4/4] Peer review feedback: Improve workaround for variadic macros and cast warnings. --- src/ocsp.c | 6 ++---- src/tls.c | 21 +++++++++++---------- wolfssl/wolfcrypt/logging.h | 12 ++++++++++-- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/ocsp.c b/src/ocsp.c index 8b93c1748a..fcdec17887 100644 --- a/src/ocsp.c +++ b/src/ocsp.c @@ -1634,8 +1634,7 @@ int wolfSSL_OCSP_REQ_CTX_nbio(WOLFSSL_OCSP_REQ_CTX *ctx) case ORIOS_WRITE: { const unsigned char *req; - int reqLen = wolfSSL_BIO_get_mem_data(ctx->reqResp, - (unsigned char*)&req); + int reqLen = wolfSSL_BIO_get_mem_data(ctx->reqResp, (void*)&req); if (reqLen <= 0) { WOLFSSL_MSG("wolfSSL_BIO_get_mem_data error"); return WOLFSSL_FAILURE; @@ -1711,8 +1710,7 @@ int wolfSSL_OCSP_sendreq_nbio(OcspResponse **presp, WOLFSSL_OCSP_REQ_CTX *ctx) if (ret != WOLFSSL_SUCCESS) return ret; - len = wolfSSL_BIO_get_mem_data(ctx->reqResp, - (unsigned char*)&resp); + len = wolfSSL_BIO_get_mem_data(ctx->reqResp, (void*)&resp); if (len <= 0) return WOLFSSL_FAILURE; return wolfSSL_d2i_OCSP_RESPONSE(presp, &resp, len) != NULL diff --git a/src/tls.c b/src/tls.c index a85ce19223..85231572c6 100644 --- a/src/tls.c +++ b/src/tls.c @@ -7168,15 +7168,16 @@ static int TLSX_CA_Names_Parse(WOLFSSL *ssl, const byte* input, return 0; } -#define CAN_GET_SIZE TLSX_CA_Names_GetSize -#define CAN_WRITE TLSX_CA_Names_Write -#define CAN_PARSE TLSX_CA_Names_Parse +#define CAN_GET_SIZE(data) TLSX_CA_Names_GetSize(data) +#define CAN_WRITE(data, output) TLSX_CA_Names_Write(data, output) +#define CAN_PARSE(ssl, input, length, isRequest) \ + TLSX_CA_Names_Parse(ssl, input, length, isRequest) #else -#define CAN_GET_SIZE() 0 -#define CAN_WRITE() 0 -#define CAN_PARSE() 0 +#define CAN_GET_SIZE(data) 0 +#define CAN_WRITE(data, output) 0 +#define CAN_PARSE(ssl, input, length, isRequest) 0 #endif @@ -14762,9 +14763,9 @@ static word16 TLSX_GetMinSize_Client(word16* type) return 0; } } - #define TLSX_GET_MIN_SIZE_CLIENT TLSX_GetMinSize_Client + #define TLSX_GET_MIN_SIZE_CLIENT(type) TLSX_GetMinSize_Client(type) #else - #define TLSX_GET_MIN_SIZE_CLIENT() 0 + #define TLSX_GET_MIN_SIZE_CLIENT(type) 0 #endif @@ -14831,9 +14832,9 @@ static word16 TLSX_GetMinSize_Server(const word16 *type) return 0; } } - #define TLSX_GET_MIN_SIZE_SERVER TLSX_GetMinSize_Server + #define TLSX_GET_MIN_SIZE_SERVER(type) TLSX_GetMinSize_Server(type) #else - #define TLSX_GET_MIN_SIZE_SERVER() 0 + #define TLSX_GET_MIN_SIZE_SERVER(type) 0 #endif diff --git a/wolfssl/wolfcrypt/logging.h b/wolfssl/wolfcrypt/logging.h index 3d3e923bd3..fe2e108ee8 100644 --- a/wolfssl/wolfcrypt/logging.h +++ b/wolfssl/wolfcrypt/logging.h @@ -178,7 +178,11 @@ WOLFSSL_API void wolfSSL_SetLoggingPrefix(const char* prefix); WOLFSSL_API void WOLFSSL_MSG_EX(const char* fmt, ...); #define HAVE_WOLFSSL_MSG_EX #else - #define WOLFSSL_MSG_EX() WC_DO_NOTHING + #ifdef __WATCOMC__ /* does not allow variadic macros */ + #define WOLFSSL_MSG_EX() WC_DO_NOTHING + #else + #define WOLFSSL_MSG_EX(...) WC_DO_NOTHING + #endif #endif WOLFSSL_API void WOLFSSL_MSG(const char* msg); #ifdef WOLFSSL_DEBUG_CODEPOINTS @@ -209,7 +213,11 @@ WOLFSSL_API void wolfSSL_SetLoggingPrefix(const char* prefix); #define WOLFSSL_STUB(m) WC_DO_NOTHING #define WOLFSSL_IS_DEBUG_ON() 0 - #define WOLFSSL_MSG_EX(...) WC_DO_NOTHING + #ifdef __WATCOMC__ /* does not allow variadic macros */ + #define WOLFSSL_MSG_EX() WC_DO_NOTHING + #else + #define WOLFSSL_MSG_EX(...) WC_DO_NOTHING + #endif #define WOLFSSL_MSG(m) WC_DO_NOTHING #define WOLFSSL_BUFFER(b, l) WC_DO_NOTHING