diff --git a/library/debug.c b/library/debug.c index c71f4dfbc..0aeb0e487 100644 --- a/library/debug.c +++ b/library/debug.c @@ -34,16 +34,6 @@ #include #include -#if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) -#if !defined snprintf -#define snprintf _snprintf -#endif - -#if !defined vsnprintf -#define vsnprintf _vsnprintf -#endif -#endif /* _MSC_VER */ - #if defined(MBEDTLS_PLATFORM_C) #include "mbedtls/platform.h" #else @@ -67,13 +57,15 @@ char *mbedtls_debug_fmt( const char *format, ... ) { va_list argp; static char str[512]; - int maxlen = sizeof( str ) - 1; va_start( argp, format ); - vsnprintf( str, maxlen, format, argp ); +#if defined(_WIN32) + _vsnprintf_s( str, sizeof( str ), _TRUNCATE, format, argp ); +#else + vsnprintf( str, sizeof( str ), format, argp ); +#endif va_end( argp ); - str[maxlen] = '\0'; return( str ); } @@ -81,7 +73,6 @@ void mbedtls_debug_print_msg( const mbedtls_ssl_context *ssl, int level, const char *file, int line, const char *text ) { char str[512]; - int maxlen = sizeof( str ) - 1; if( ssl->conf == NULL || ssl->conf->f_dbg == NULL || level > debug_threshold ) return; @@ -92,8 +83,7 @@ void mbedtls_debug_print_msg( const mbedtls_ssl_context *ssl, int level, return; } - mbedtls_snprintf( str, maxlen, "%s(%04d): %s\n", file, line, text ); - str[maxlen] = '\0'; + mbedtls_snprintf( str, sizeof( str ), "%s(%04d): %s\n", file, line, text ); ssl->conf->f_dbg( ssl->conf->p_dbg, level, str ); } @@ -102,7 +92,6 @@ void mbedtls_debug_print_ret( const mbedtls_ssl_context *ssl, int level, const char *text, int ret ) { char str[512]; - int maxlen = sizeof( str ) - 1; size_t idx = 0; if( ssl->conf == NULL || ssl->conf->f_dbg == NULL || level > debug_threshold ) @@ -117,12 +106,11 @@ void mbedtls_debug_print_ret( const mbedtls_ssl_context *ssl, int level, return; if( debug_log_mode == MBEDTLS_DEBUG_LOG_FULL ) - idx = mbedtls_snprintf( str, maxlen, "%s(%04d): ", file, line ); + idx = mbedtls_snprintf( str, sizeof( str ), "%s(%04d): ", file, line ); - mbedtls_snprintf( str + idx, maxlen - idx, "%s() returned %d (-0x%04x)\n", + mbedtls_snprintf( str + idx, sizeof( str ) - idx, "%s() returned %d (-0x%04x)\n", text, ret, -ret ); - str[maxlen] = '\0'; ssl->conf->f_dbg( ssl->conf->p_dbg, level, str ); } @@ -132,18 +120,17 @@ void mbedtls_debug_print_buf( const mbedtls_ssl_context *ssl, int level, { char str[512]; char txt[17]; - size_t i, maxlen = sizeof( str ) - 1, idx = 0; + size_t i, idx = 0; if( ssl->conf == NULL || ssl->conf->f_dbg == NULL || level > debug_threshold ) return; if( debug_log_mode == MBEDTLS_DEBUG_LOG_FULL ) - idx = mbedtls_snprintf( str, maxlen, "%s(%04d): ", file, line ); + idx = mbedtls_snprintf( str, sizeof( str ), "%s(%04d): ", file, line ); - mbedtls_snprintf( str + idx, maxlen - idx, "dumping '%s' (%u bytes)\n", + mbedtls_snprintf( str + idx, sizeof( str ) - idx, "dumping '%s' (%u bytes)\n", text, (unsigned int) len ); - str[maxlen] = '\0'; ssl->conf->f_dbg( ssl->conf->p_dbg, level, str ); idx = 0; @@ -157,7 +144,7 @@ void mbedtls_debug_print_buf( const mbedtls_ssl_context *ssl, int level, { if( i > 0 ) { - mbedtls_snprintf( str + idx, maxlen - idx, " %s\n", txt ); + mbedtls_snprintf( str + idx, sizeof( str ) - idx, " %s\n", txt ); ssl->conf->f_dbg( ssl->conf->p_dbg, level, str ); idx = 0; @@ -165,14 +152,14 @@ void mbedtls_debug_print_buf( const mbedtls_ssl_context *ssl, int level, } if( debug_log_mode == MBEDTLS_DEBUG_LOG_FULL ) - idx = mbedtls_snprintf( str, maxlen, "%s(%04d): ", file, line ); + idx = mbedtls_snprintf( str, sizeof( str ), "%s(%04d): ", file, line ); - idx += mbedtls_snprintf( str + idx, maxlen - idx, "%04x: ", + idx += mbedtls_snprintf( str + idx, sizeof( str ) - idx, "%04x: ", (unsigned int) i ); } - idx += mbedtls_snprintf( str + idx, maxlen - idx, " %02x", + idx += mbedtls_snprintf( str + idx, sizeof( str ) - idx, " %02x", (unsigned int) buf[i] ); txt[i % 16] = ( buf[i] > 31 && buf[i] < 127 ) ? buf[i] : '.' ; } @@ -180,9 +167,9 @@ void mbedtls_debug_print_buf( const mbedtls_ssl_context *ssl, int level, if( len > 0 ) { for( /* i = i */; i % 16 != 0; i++ ) - idx += mbedtls_snprintf( str + idx, maxlen - idx, " " ); + idx += mbedtls_snprintf( str + idx, sizeof( str ) - idx, " " ); - mbedtls_snprintf( str + idx, maxlen - idx, " %s\n", txt ); + mbedtls_snprintf( str + idx, sizeof( str ) - idx, " %s\n", txt ); ssl->conf->f_dbg( ssl->conf->p_dbg, level, str ); } } @@ -193,17 +180,14 @@ void mbedtls_debug_print_ecp( const mbedtls_ssl_context *ssl, int level, const char *text, const mbedtls_ecp_point *X ) { char str[512]; - int maxlen = sizeof( str ) - 1; if( ssl->conf == NULL || ssl->conf->f_dbg == NULL || level > debug_threshold ) return; - mbedtls_snprintf( str, maxlen, "%s(X)", text ); - str[maxlen] = '\0'; + mbedtls_snprintf( str, sizeof( str ), "%s(X)", text ); mbedtls_debug_print_mpi( ssl, level, file, line, str, &X->X ); - mbedtls_snprintf( str, maxlen, "%s(Y)", text ); - str[maxlen] = '\0'; + mbedtls_snprintf( str, sizeof( str ), "%s(Y)", text ); mbedtls_debug_print_mpi( ssl, level, file, line, str, &X->Y ); } #endif /* MBEDTLS_ECP_C */ @@ -214,7 +198,7 @@ void mbedtls_debug_print_mpi( const mbedtls_ssl_context *ssl, int level, const char *text, const mbedtls_mpi *X ) { char str[512]; - int j, k, maxlen = sizeof( str ) - 1, zeros = 1; + int j, k, zeros = 1; size_t i, n, idx = 0; if( ssl->conf == NULL || ssl->conf->f_dbg == NULL || X == NULL || level > debug_threshold ) @@ -229,12 +213,11 @@ void mbedtls_debug_print_mpi( const mbedtls_ssl_context *ssl, int level, break; if( debug_log_mode == MBEDTLS_DEBUG_LOG_FULL ) - idx = mbedtls_snprintf( str, maxlen, "%s(%04d): ", file, line ); + idx = mbedtls_snprintf( str, sizeof( str ), "%s(%04d): ", file, line ); - mbedtls_snprintf( str + idx, maxlen - idx, "value of '%s' (%d bits) is:\n", + mbedtls_snprintf( str + idx, sizeof( str ) - idx, "value of '%s' (%d bits) is:\n", text, (int) ( ( n * ( sizeof(mbedtls_mpi_uint) << 3 ) ) + j + 1 ) ); - str[maxlen] = '\0'; ssl->conf->f_dbg( ssl->conf->p_dbg, level, str ); idx = 0; @@ -254,16 +237,16 @@ void mbedtls_debug_print_mpi( const mbedtls_ssl_context *ssl, int level, { if( j > 0 ) { - mbedtls_snprintf( str + idx, maxlen - idx, "\n" ); + mbedtls_snprintf( str + idx, sizeof( str ) - idx, "\n" ); ssl->conf->f_dbg( ssl->conf->p_dbg, level, str ); idx = 0; } if( debug_log_mode == MBEDTLS_DEBUG_LOG_FULL ) - idx = mbedtls_snprintf( str, maxlen, "%s(%04d): ", file, line ); + idx = mbedtls_snprintf( str, sizeof( str ), "%s(%04d): ", file, line ); } - idx += mbedtls_snprintf( str + idx, maxlen - idx, " %02x", (unsigned int) + idx += mbedtls_snprintf( str + idx, sizeof( str ) - idx, " %02x", (unsigned int) ( X->p[i - 1] >> ( k << 3 ) ) & 0xFF ); j++; @@ -275,13 +258,13 @@ void mbedtls_debug_print_mpi( const mbedtls_ssl_context *ssl, int level, { if( debug_log_mode == MBEDTLS_DEBUG_LOG_FULL ) { - idx = mbedtls_snprintf( str, maxlen, "%s(%04d): ", file, line ); + idx = mbedtls_snprintf( str, sizeof( str ), "%s(%04d): ", file, line ); } - idx += mbedtls_snprintf( str + idx, maxlen - idx, " 00" ); + idx += mbedtls_snprintf( str + idx, sizeof( str ) - idx, " 00" ); } - mbedtls_snprintf( str + idx, maxlen - idx, "\n" ); + mbedtls_snprintf( str + idx, sizeof( str ) - idx, "\n" ); ssl->conf->f_dbg( ssl->conf->p_dbg, level, str ); } #endif /* MBEDTLS_BIGNUM_C */ @@ -328,33 +311,29 @@ void mbedtls_debug_print_crt( const mbedtls_ssl_context *ssl, int level, const char *text, const mbedtls_x509_crt *crt ) { char str[1024], prefix[64]; - int i = 0, maxlen = sizeof( prefix ) - 1, idx = 0; + int i = 0, idx = 0; if( ssl->conf == NULL || ssl->conf->f_dbg == NULL || crt == NULL || level > debug_threshold ) return; if( debug_log_mode == MBEDTLS_DEBUG_LOG_FULL ) { - mbedtls_snprintf( prefix, maxlen, "%s(%04d): ", file, line ); - prefix[maxlen] = '\0'; + mbedtls_snprintf( prefix, sizeof( prefix ), "%s(%04d): ", file, line ); } else prefix[0] = '\0'; - maxlen = sizeof( str ) - 1; - while( crt != NULL ) { char buf[1024]; mbedtls_x509_crt_info( buf, sizeof( buf ) - 1, prefix, crt ); if( debug_log_mode == MBEDTLS_DEBUG_LOG_FULL ) - idx = mbedtls_snprintf( str, maxlen, "%s(%04d): ", file, line ); + idx = mbedtls_snprintf( str, sizeof( str ), "%s(%04d): ", file, line ); - mbedtls_snprintf( str + idx, maxlen - idx, "%s #%d:\n%s", + mbedtls_snprintf( str + idx, sizeof( str ) - idx, "%s #%d:\n%s", text, ++i, buf ); - str[maxlen] = '\0'; ssl->conf->f_dbg( ssl->conf->p_dbg, level, str ); debug_print_pk( ssl, level, file, line, "crt->", &crt->pk ); diff --git a/library/error.c b/library/error.c index f0a86f64d..21be42347 100644 --- a/library/error.c +++ b/library/error.c @@ -149,10 +149,6 @@ #include "mbedtls/xtea.h" #endif -#if defined(_MSC_VER) && !defined snprintf && !defined(EFIX64) && \ - !defined(EFI32) -#define snprintf _snprintf -#endif void mbedtls_strerror( int ret, char *buf, size_t buflen ) { @@ -163,8 +159,6 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen ) return; memset( buf, 0x00, buflen ); - /* Reduce buflen to make sure MSVC _snprintf() ends with \0 as well */ - buflen -= 1; if( ret < 0 ) ret = -ret; @@ -474,6 +468,8 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen ) mbedtls_snprintf( buf, buflen, "X509 - Allocation of memory failed" ); if( use_ret == -(MBEDTLS_ERR_X509_FILE_IO_ERROR) ) mbedtls_snprintf( buf, buflen, "X509 - Read/write of file failed" ); + if( use_ret == -(MBEDTLS_ERR_X509_BUFFER_TOO_SMALL) ) + mbedtls_snprintf( buf, buflen, "X509 - Destination buffer is too small" ); #endif /* MBEDTLS_X509_USE_C || MBEDTLS_X509_CREATE_C */ // END generated code diff --git a/library/net.c b/library/net.c index 8eb51727e..e6dd5dbd8 100644 --- a/library/net.c +++ b/library/net.c @@ -77,11 +77,6 @@ static int wsa_init_done = 0; #include #include -#if defined(_MSC_VER) && !defined snprintf && !defined(EFIX64) && \ - !defined(EFI32) -#define snprintf _snprintf -#endif - #include #if defined(_MSC_VER) && !defined(EFIX64) && !defined(EFI32) diff --git a/library/oid.c b/library/oid.c index 0913552a4..f14282add 100644 --- a/library/oid.c +++ b/library/oid.c @@ -598,55 +598,14 @@ FN_OID_TYPED_FROM_ASN1(oid_pkcs12_pbe_alg_t, pkcs12_pbe_alg, oid_pkcs12_pbe_alg) FN_OID_GET_ATTR2(mbedtls_oid_get_pkcs12_pbe_alg, oid_pkcs12_pbe_alg_t, pkcs12_pbe_alg, mbedtls_md_type_t, md_alg, mbedtls_cipher_type_t, cipher_alg) #endif /* MBEDTLS_PKCS12_C */ -#if defined(_MSC_VER) && !defined snprintf && !defined(EFIX64) && \ - !defined(EFI32) -#include - -#if !defined vsnprintf -#define vsnprintf _vsnprintf -#endif // vsnprintf - -/* - * Windows _snprintf and _vsnprintf are not compatible to linux versions. - * Result value is not size of buffer needed, but -1 if no fit is possible. - * - * This fuction tries to 'fix' this by at least suggesting enlarging the - * size by 20. - */ -static int compat_snprintf( char *str, size_t size, const char *format, ... ) -{ - va_list ap; - int res = -1; - - va_start( ap, format ); - - res = vsnprintf( str, size, format, ap ); - - va_end( ap ); - - // No quick fix possible - if( res < 0 ) - return( (int) size + 20 ); - - return( res ); -} - -#define snprintf compat_snprintf -#endif /* _MSC_VER && !snprintf && !EFIX64 && !EFI32 */ - -#define SAFE_SNPRINTF() \ -{ \ - if( ret == -1 ) \ - return( MBEDTLS_ERR_OID_BUF_TOO_SMALL ); \ - \ - if( (unsigned int) ret >= n ) { \ - p[n - 1] = '\0'; \ - return( MBEDTLS_ERR_OID_BUF_TOO_SMALL ); \ - } \ - \ - n -= (unsigned int) ret; \ - p += (unsigned int) ret; \ -} +#define OID_SAFE_SNPRINTF \ + do { \ + if( ret < 0 || (size_t) ret >= n ) \ + return( MBEDTLS_ERR_OID_BUF_TOO_SMALL ); \ + \ + n -= (size_t) ret; \ + p += (size_t) ret; \ + } while( 0 ) /* Return the x.y.z.... style numeric string for the given OID */ int mbedtls_oid_get_numeric_string( char *buf, size_t size, @@ -664,7 +623,7 @@ int mbedtls_oid_get_numeric_string( char *buf, size_t size, if( oid->len > 0 ) { ret = mbedtls_snprintf( p, n, "%d.%d", oid->p[0] / 40, oid->p[0] % 40 ); - SAFE_SNPRINTF(); + OID_SAFE_SNPRINTF; } value = 0; @@ -681,7 +640,7 @@ int mbedtls_oid_get_numeric_string( char *buf, size_t size, { /* Last byte */ ret = mbedtls_snprintf( p, n, ".%d", value ); - SAFE_SNPRINTF(); + OID_SAFE_SNPRINTF; value = 0; } } diff --git a/scripts/data_files/error.fmt b/scripts/data_files/error.fmt index d66f6eb8a..a097aac22 100644 --- a/scripts/data_files/error.fmt +++ b/scripts/data_files/error.fmt @@ -42,10 +42,6 @@ #include HEADER_INCLUDED -#if defined(_MSC_VER) && !defined snprintf && !defined(EFIX64) && \ - !defined(EFI32) -#define snprintf _snprintf -#endif void mbedtls_strerror( int ret, char *buf, size_t buflen ) { @@ -56,8 +52,6 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen ) return; memset( buf, 0x00, buflen ); - /* Reduce buflen to make sure MSVC _snprintf() ends with \0 as well */ - buflen -= 1; if( ret < 0 ) ret = -ret;