From d5102c9d7cee0ad86c99b9bd774d818de4783d3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bence=20Sz=C3=A9pk=C3=BAti?= Date: Fri, 28 Feb 2025 16:22:33 +0100 Subject: [PATCH 01/12] Run test_suite_debug without MBEDTLS_SSL_TLS_C MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move the suite's global dependency on MBEDTLS_SSL_TLS_C to the individual test cases. Add an preprocesor guard around string_debug to prevent warning about unused functions. Signed-off-by: Bence Szépkúti --- tests/suites/test_suite_debug.function | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/tests/suites/test_suite_debug.function b/tests/suites/test_suite_debug.function index 878ceed574..371f3976f4 100644 --- a/tests/suites/test_suite_debug.function +++ b/tests/suites/test_suite_debug.function @@ -9,6 +9,7 @@ struct buffer_data { char *ptr; }; +#if defined(MBEDTLS_SSL_TLS_C) static void string_debug(void *data, int level, const char *file, int line, const char *str) { struct buffer_data *buffer = (struct buffer_data *) data; @@ -44,14 +45,15 @@ static void string_debug(void *data, int level, const char *file, int line, cons buffer->ptr = p; } +#endif /* MBEDTLS_SSL_TLS_C */ /* END_HEADER */ /* BEGIN_DEPENDENCIES - * depends_on:MBEDTLS_DEBUG_C:MBEDTLS_SSL_TLS_C + * depends_on:MBEDTLS_DEBUG_C * END_DEPENDENCIES */ -/* BEGIN_CASE */ +/* BEGIN_CASE depends_on:MBEDTLS_SSL_TLS_C */ void debug_print_msg_threshold(int threshold, int level, char *file, int line, char *result_str) { @@ -90,7 +92,7 @@ exit: } /* END_CASE */ -/* BEGIN_CASE */ +/* BEGIN_CASE depends_on:MBEDTLS_SSL_TLS_C */ void mbedtls_debug_print_ret(char *file, int line, char *text, int value, char *result_str) { @@ -126,7 +128,7 @@ exit: } /* END_CASE */ -/* BEGIN_CASE */ +/* BEGIN_CASE depends_on:MBEDTLS_SSL_TLS_C */ void mbedtls_debug_print_buf(char *file, int line, char *text, data_t *data, char *result_str) { @@ -162,7 +164,7 @@ exit: } /* END_CASE */ -/* BEGIN_CASE depends_on:MBEDTLS_FS_IO:MBEDTLS_X509_CRT_PARSE_C:!MBEDTLS_X509_REMOVE_INFO */ +/* BEGIN_CASE depends_on:MBEDTLS_SSL_TLS_C:MBEDTLS_FS_IO:MBEDTLS_X509_CRT_PARSE_C:!MBEDTLS_X509_REMOVE_INFO */ void mbedtls_debug_print_crt(char *crt_file, char *file, int line, char *prefix, char *result_str) { @@ -202,7 +204,7 @@ exit: } /* END_CASE */ -/* BEGIN_CASE depends_on:MBEDTLS_BIGNUM_C */ +/* BEGIN_CASE depends_on:MBEDTLS_SSL_TLS_C:MBEDTLS_BIGNUM_C */ void mbedtls_debug_print_mpi(char *value, char *file, int line, char *prefix, char *result_str) { From 85d92ec1ce4374342b75b30d2181a885ff873d2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bence=20Sz=C3=A9pk=C3=BAti?= Date: Fri, 28 Feb 2025 22:32:15 +0100 Subject: [PATCH 02/12] Test handling of format macros defined in debug.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Bence Szépkúti --- tests/suites/test_suite_debug.data | 7 +++++++ tests/suites/test_suite_debug.function | 28 ++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/tests/suites/test_suite_debug.data b/tests/suites/test_suite_debug.data index 8b17eb8720..4b38728afb 100644 --- a/tests/suites/test_suite_debug.data +++ b/tests/suites/test_suite_debug.data @@ -1,3 +1,10 @@ +# printf_int_expr expects a smuggled string expression as its first parameter +printf "%" MBEDTLS_PRINTF_SIZET, 0 +printf_int_expr:(uintptr_t) "%" MBEDTLS_PRINTF_SIZET:sizeof(size_t):0:"0" + +printf "%" MBEDTLS_PRINTF_LONGLONG, 0 +printf_int_expr:(uintptr_t) "%" MBEDTLS_PRINTF_LONGLONG:sizeof(long long):0:"0" + Debug print msg (threshold 1, level 0) debug_print_msg_threshold:1:0:"MyFile":999:"MyFile(0999)\: Text message, 2 == 2\n" diff --git a/tests/suites/test_suite_debug.function b/tests/suites/test_suite_debug.function index 371f3976f4..e17ffbb921 100644 --- a/tests/suites/test_suite_debug.function +++ b/tests/suites/test_suite_debug.function @@ -53,6 +53,34 @@ static void string_debug(void *data, int level, const char *file, int line, cons * END_DEPENDENCIES */ +/* BEGIN_CASE */ +void printf_int_expr(intmax_t smuggle_format_expr, /* TODO: teach test framework about string expressions */ + intmax_t sizeof_x, intmax_t x, char *result) +{ + const char *format = (char *) ((uintptr_t) smuggle_format_expr); + char *output = NULL; + const size_t n = strlen(result); + + /* Nominal case: buffer just large enough */ + TEST_CALLOC(output, n + 1); + if ((size_t) sizeof_x <= sizeof(int)) { // Any smaller integers would be promoted to an int due to calling a vararg function + TEST_EQUAL(n, mbedtls_snprintf(output, n + 1, format, (int) x)); + } else if (sizeof_x == sizeof(long)) { + TEST_EQUAL(n, mbedtls_snprintf(output, n + 1, format, (long) x)); + } else if (sizeof_x == sizeof(long long)) { + TEST_EQUAL(n, mbedtls_snprintf(output, n + 1, format, (long long) x)); + } else { + TEST_FAIL( + "sizeof_x <= sizeof(int) || sizeof_x == sizeof(long) || sizeof_x == sizeof(long long)"); + } + TEST_MEMORY_COMPARE(result, n + 1, output, n + 1); + +exit: + mbedtls_free(output); + output = NULL; +} +/* END_CASE */ + /* BEGIN_CASE depends_on:MBEDTLS_SSL_TLS_C */ void debug_print_msg_threshold(int threshold, int level, char *file, int line, char *result_str) From 9cde9d4b2cae9b35f7459117b699eb3794b64b1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bence=20Sz=C3=A9pk=C3=BAti?= Date: Sun, 2 Mar 2025 00:58:11 +0100 Subject: [PATCH 03/12] Add testcase for MBEDTLS_PRINTF_MS_TIME MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Bence Szépkúti --- tests/suites/test_suite_debug.data | 3 +++ tests/suites/test_suite_debug.function | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/tests/suites/test_suite_debug.data b/tests/suites/test_suite_debug.data index 4b38728afb..b994e54c44 100644 --- a/tests/suites/test_suite_debug.data +++ b/tests/suites/test_suite_debug.data @@ -5,6 +5,9 @@ printf_int_expr:(uintptr_t) "%" MBEDTLS_PRINTF_SIZET:sizeof(size_t):0:"0" printf "%" MBEDTLS_PRINTF_LONGLONG, 0 printf_int_expr:(uintptr_t) "%" MBEDTLS_PRINTF_LONGLONG:sizeof(long long):0:"0" +printf "%" MBEDTLS_PRINTF_MS_TIME, 0 +printf_int_expr:(uintptr_t) "%" MBEDTLS_PRINTF_MS_TIME:MBEDTLS_MS_TIME_SIZE:0:"0" + Debug print msg (threshold 1, level 0) debug_print_msg_threshold:1:0:"MyFile":999:"MyFile(0999)\: Text message, 2 == 2\n" diff --git a/tests/suites/test_suite_debug.function b/tests/suites/test_suite_debug.function index e17ffbb921..de5458ca00 100644 --- a/tests/suites/test_suite_debug.function +++ b/tests/suites/test_suite_debug.function @@ -4,6 +4,15 @@ #include "mbedtls/pk.h" #include +// Use a macro instead of sizeof(mbedtls_ms_time_t) because the expression store +// doesn't exclude entries based on depends_on headers, which would cause failures +// in builds without MBEDTLS_HAVE_TIME +#if defined(MBEDTLS_PLATFORM_MS_TIME_TYPE_MACRO) +# define MBEDTLS_MS_TIME_SIZE sizeof(MBEDTLS_PLATFORM_MS_TIME_TYPE_MACRO) +#else +# define MBEDTLS_MS_TIME_SIZE sizeof(int64_t) +#endif + struct buffer_data { char buf[2000]; char *ptr; From 1e62c95148748a6a0b17ee0ecb2ff3794d6e573f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bence=20Sz=C3=A9pk=C3=BAti?= Date: Sun, 2 Mar 2025 01:17:02 +0100 Subject: [PATCH 04/12] Disable fatal assertions in Windows printf tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Windows CRT treats any invalid format specifiers passed to the CRT as fatal assertion failures. Disable thie behaviour temporarily while testing if the format specifiers we use are supported. Signed-off-by: Bence Szépkúti --- tests/suites/test_suite_debug.function | 40 ++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/tests/suites/test_suite_debug.function b/tests/suites/test_suite_debug.function index de5458ca00..f6d7611a63 100644 --- a/tests/suites/test_suite_debug.function +++ b/tests/suites/test_suite_debug.function @@ -4,6 +4,11 @@ #include "mbedtls/pk.h" #include +#if defined(_WIN32) +# include +# include +#endif + // Use a macro instead of sizeof(mbedtls_ms_time_t) because the expression store // doesn't exclude entries based on depends_on headers, which would cause failures // in builds without MBEDTLS_HAVE_TIME @@ -55,6 +60,23 @@ static void string_debug(void *data, int level, const char *file, int line, cons buffer->ptr = p; } #endif /* MBEDTLS_SSL_TLS_C */ + +#if defined(_WIN32) +static void noop_invalid_parameter_handler( + const wchar_t *expression, + const wchar_t *function, + const wchar_t *file, + unsigned int line, + uintptr_t pReserved) +{ + (void) expression; + (void) function; + (void) file; + (void) line; + (void) pReserved; +} +#endif /* _WIN32 */ + /* END_HEADER */ /* BEGIN_DEPENDENCIES @@ -66,6 +88,17 @@ static void string_debug(void *data, int level, const char *file, int line, cons void printf_int_expr(intmax_t smuggle_format_expr, /* TODO: teach test framework about string expressions */ intmax_t sizeof_x, intmax_t x, char *result) { +#if defined(_WIN32) + /* Windows treats any invalid format specifiers passsed to the CRT as fatal assertion failures. + Disable this behaviour temporarily, so the rest of the test cases can complete. */ + _invalid_parameter_handler saved_handler = + _set_invalid_parameter_handler(noop_invalid_parameter_handler); + + // Disable assertion pop-up window in Debug builds + int saved_report_mode = _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_REPORT_MODE); + _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_DEBUG); +#endif + const char *format = (char *) ((uintptr_t) smuggle_format_expr); char *output = NULL; const size_t n = strlen(result); @@ -87,6 +120,13 @@ void printf_int_expr(intmax_t smuggle_format_expr, /* TODO: teach test framework exit: mbedtls_free(output); output = NULL; + +#if defined(_WIN32) + // Restore default Windows behaviour + _set_invalid_parameter_handler(saved_handler); + _CrtSetReportMode(_CRT_ASSERT, saved_report_mode); + (void) saved_report_mode; +#endif } /* END_CASE */ From f65983d6706c3cff2c2ebedf56a9e1c331e8feab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bence=20Sz=C3=A9pk=C3=BAti?= Date: Fri, 28 Feb 2025 22:39:09 +0100 Subject: [PATCH 05/12] Fix MSVC version guard for C99 format size specifiers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Visual Studio 2013 (_MSC_VER == 1800) doesn't support %zu - only use it on 2015 and above (_MSC_VER >= 1900). %ldd works on Visual Studio 2013, but this patch keeps the two macro definitions together, for simplicity's sake. Signed-off-by: Bence Szépkúti --- ChangeLog.d/fix-msvc-version-guard-format-zu.txt | 5 +++++ include/mbedtls/debug.h | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 ChangeLog.d/fix-msvc-version-guard-format-zu.txt diff --git a/ChangeLog.d/fix-msvc-version-guard-format-zu.txt b/ChangeLog.d/fix-msvc-version-guard-format-zu.txt new file mode 100644 index 0000000000..637388ecaa --- /dev/null +++ b/ChangeLog.d/fix-msvc-version-guard-format-zu.txt @@ -0,0 +1,5 @@ +Bugfix + * Fix definition of MBEDTLS_PRINTF_SIZET to prevent runtime crashes that + occurred whenever SSL debugging was enabled on a copy of Mbed TLS built + with Visual Studio 2013. + Fixes #10017. diff --git a/include/mbedtls/debug.h b/include/mbedtls/debug.h index 424ed4b3fd..a940ef7821 100644 --- a/include/mbedtls/debug.h +++ b/include/mbedtls/debug.h @@ -108,16 +108,16 @@ * * This module provides debugging functions. */ -#if (defined(__MINGW32__) && __USE_MINGW_ANSI_STDIO == 0) || (defined(_MSC_VER) && _MSC_VER < 1800) +#if (defined(__MINGW32__) && __USE_MINGW_ANSI_STDIO == 0) || (defined(_MSC_VER) && _MSC_VER < 1900) #include #define MBEDTLS_PRINTF_SIZET PRIuPTR #define MBEDTLS_PRINTF_LONGLONG "I64d" #else \ - /* (defined(__MINGW32__) && __USE_MINGW_ANSI_STDIO == 0) || (defined(_MSC_VER) && _MSC_VER < 1800) */ + /* (defined(__MINGW32__) && __USE_MINGW_ANSI_STDIO == 0) || (defined(_MSC_VER) && _MSC_VER < 1900) */ #define MBEDTLS_PRINTF_SIZET "zu" #define MBEDTLS_PRINTF_LONGLONG "lld" #endif \ - /* (defined(__MINGW32__) && __USE_MINGW_ANSI_STDIO == 0) || (defined(_MSC_VER) && _MSC_VER < 1800) */ + /* (defined(__MINGW32__) && __USE_MINGW_ANSI_STDIO == 0) || (defined(_MSC_VER) && _MSC_VER < 1900) */ #if !defined(MBEDTLS_PRINTF_MS_TIME) #include From 8154c5823e957a14f845a2cfb5d9363314d93bca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bence=20Sz=C3=A9pk=C3=BAti?= Date: Sat, 1 Mar 2025 23:53:47 +0100 Subject: [PATCH 06/12] Remove Everest VS2010 compatibility headers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These headers were necessary for compatibility with Visual Studio 2010, and interfere with the system headers on Visual Studio 2013+, eg. when building Mbed TLS using the .sln file shipped with the project. Move the still-required definition of "inline" to callconv.h, where the definition for GCC also lives. Signed-off-by: Bence Szépkúti --- .../include/everest/kremlin/c_endianness.h | 2 ++ .../everest/kremlin/internal/callconv.h | 4 ++- .../everest/include/everest/vs2013/inttypes.h | 36 ------------------- .../everest/include/everest/vs2013/stdbool.h | 31 ---------------- .../fix-msvc-version-guard-format-zu.txt | 3 ++ 5 files changed, 8 insertions(+), 68 deletions(-) delete mode 100644 3rdparty/everest/include/everest/vs2013/inttypes.h delete mode 100644 3rdparty/everest/include/everest/vs2013/stdbool.h diff --git a/3rdparty/everest/include/everest/kremlin/c_endianness.h b/3rdparty/everest/include/everest/kremlin/c_endianness.h index 5cfde5d9ea..1b0d0eb05b 100644 --- a/3rdparty/everest/include/everest/kremlin/c_endianness.h +++ b/3rdparty/everest/include/everest/kremlin/c_endianness.h @@ -7,6 +7,8 @@ #include #include +#include "kremlin/internal/callconv.h" + /******************************************************************************/ /* Implementing C.fst (part 2: endian-ness macros) */ /******************************************************************************/ diff --git a/3rdparty/everest/include/everest/kremlin/internal/callconv.h b/3rdparty/everest/include/everest/kremlin/internal/callconv.h index bf631ff46f..8ff8ca5ae9 100644 --- a/3rdparty/everest/include/everest/kremlin/internal/callconv.h +++ b/3rdparty/everest/include/everest/kremlin/internal/callconv.h @@ -27,8 +27,10 @@ /* Since KreMLin emits the inline keyword unconditionally, we follow the * guidelines at https://gcc.gnu.org/onlinedocs/gcc/Inline.html and make this * __inline__ to ensure the code compiles with -std=c90 and earlier. */ -#ifdef __GNUC__ +#if defined(__GNUC__) # define inline __inline__ +#elif defined(_MSC_VER) +# define inline __inline #endif /* GCC-specific attribute syntax; everyone else gets the standard C inline diff --git a/3rdparty/everest/include/everest/vs2013/inttypes.h b/3rdparty/everest/include/everest/vs2013/inttypes.h deleted file mode 100644 index 77003be0b0..0000000000 --- a/3rdparty/everest/include/everest/vs2013/inttypes.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Custom inttypes.h for VS2010 KreMLin requires these definitions, - * but VS2010 doesn't provide them. - * - * Copyright 2016-2018 INRIA and Microsoft Corporation - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * This file is part of Mbed TLS (https://tls.mbed.org) - */ - -#ifndef _INTTYPES_H_VS2010 -#define _INTTYPES_H_VS2010 - -#include - -#ifdef _MSC_VER -#define inline __inline -#endif - -/* VS2010 unsigned long == 8 bytes */ - -#define PRIu64 "I64u" - -#endif diff --git a/3rdparty/everest/include/everest/vs2013/stdbool.h b/3rdparty/everest/include/everest/vs2013/stdbool.h deleted file mode 100644 index dcae6d80ad..0000000000 --- a/3rdparty/everest/include/everest/vs2013/stdbool.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Custom stdbool.h for VS2010 KreMLin requires these definitions, - * but VS2010 doesn't provide them. - * - * Copyright 2016-2018 INRIA and Microsoft Corporation - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * This file is part of Mbed TLS (https://tls.mbed.org) - */ - -#ifndef _STDBOOL_H_VS2010 -#define _STDBOOL_H_VS2010 - -typedef int bool; - -static bool true = 1; -static bool false = 0; - -#endif diff --git a/ChangeLog.d/fix-msvc-version-guard-format-zu.txt b/ChangeLog.d/fix-msvc-version-guard-format-zu.txt index 637388ecaa..7e68ddb602 100644 --- a/ChangeLog.d/fix-msvc-version-guard-format-zu.txt +++ b/ChangeLog.d/fix-msvc-version-guard-format-zu.txt @@ -3,3 +3,6 @@ Bugfix occurred whenever SSL debugging was enabled on a copy of Mbed TLS built with Visual Studio 2013. Fixes #10017. + * Remove Everest Visual Studio 2010 compatibility headers, which could + interfere with standard CRT headers in certain situations, eg. when + building Mbed TLS with the .sln file shipped with the project. From c6934ff670fde243ce60793815baa96eefbf5945 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bence=20Sz=C3=A9pk=C3=BAti?= Date: Fri, 7 Mar 2025 17:22:40 +0100 Subject: [PATCH 07/12] Never use %zu on MinGW MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Bence Szépkúti --- include/mbedtls/debug.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/mbedtls/debug.h b/include/mbedtls/debug.h index a940ef7821..8e1bd83a1a 100644 --- a/include/mbedtls/debug.h +++ b/include/mbedtls/debug.h @@ -108,7 +108,7 @@ * * This module provides debugging functions. */ -#if (defined(__MINGW32__) && __USE_MINGW_ANSI_STDIO == 0) || (defined(_MSC_VER) && _MSC_VER < 1900) +#if defined(__MINGW32__) || (defined(_MSC_VER) && _MSC_VER < 1900) #include #define MBEDTLS_PRINTF_SIZET PRIuPTR #define MBEDTLS_PRINTF_LONGLONG "I64d" From 23e941a2e72b7ed1976c0b2bfe4c3216b76ce28c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bence=20Sz=C3=A9pk=C3=BAti?= Date: Sat, 8 Mar 2025 00:40:47 +0100 Subject: [PATCH 08/12] Update changelog to call out MinGW MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Bence Szépkúti --- ChangeLog.d/fix-msvc-version-guard-format-zu.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ChangeLog.d/fix-msvc-version-guard-format-zu.txt b/ChangeLog.d/fix-msvc-version-guard-format-zu.txt index 7e68ddb602..e61cd7d429 100644 --- a/ChangeLog.d/fix-msvc-version-guard-format-zu.txt +++ b/ChangeLog.d/fix-msvc-version-guard-format-zu.txt @@ -1,7 +1,7 @@ Bugfix * Fix definition of MBEDTLS_PRINTF_SIZET to prevent runtime crashes that occurred whenever SSL debugging was enabled on a copy of Mbed TLS built - with Visual Studio 2013. + with Visual Studio 2013 or MinGW. Fixes #10017. * Remove Everest Visual Studio 2010 compatibility headers, which could interfere with standard CRT headers in certain situations, eg. when From db475821f9849e6cb6db913dab097be96198f300 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bence=20Sz=C3=A9pk=C3=BAti?= Date: Sat, 8 Mar 2025 01:02:37 +0100 Subject: [PATCH 09/12] Fix comments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Bence Szépkúti --- include/mbedtls/debug.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/mbedtls/debug.h b/include/mbedtls/debug.h index 8e1bd83a1a..e6f5dadb14 100644 --- a/include/mbedtls/debug.h +++ b/include/mbedtls/debug.h @@ -113,11 +113,11 @@ #define MBEDTLS_PRINTF_SIZET PRIuPTR #define MBEDTLS_PRINTF_LONGLONG "I64d" #else \ - /* (defined(__MINGW32__) && __USE_MINGW_ANSI_STDIO == 0) || (defined(_MSC_VER) && _MSC_VER < 1900) */ + /* defined(__MINGW32__) || (defined(_MSC_VER) && _MSC_VER < 1900) */ #define MBEDTLS_PRINTF_SIZET "zu" #define MBEDTLS_PRINTF_LONGLONG "lld" #endif \ - /* (defined(__MINGW32__) && __USE_MINGW_ANSI_STDIO == 0) || (defined(_MSC_VER) && _MSC_VER < 1900) */ + /* defined(__MINGW32__) || (defined(_MSC_VER) && _MSC_VER < 1900) */ #if !defined(MBEDTLS_PRINTF_MS_TIME) #include From f525505886cd9319430be6382dbb7fd28bdb7912 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bence=20Sz=C3=A9pk=C3=BAti?= Date: Tue, 11 Mar 2025 17:47:11 +0100 Subject: [PATCH 10/12] Clarify changelog MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove mention of the shipped .sln files, as those are planned to be removed from Mbed TLS. Clarify the affected CRT headers. Signed-off-by: Bence Szépkúti --- ChangeLog.d/fix-msvc-version-guard-format-zu.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ChangeLog.d/fix-msvc-version-guard-format-zu.txt b/ChangeLog.d/fix-msvc-version-guard-format-zu.txt index e61cd7d429..2713f6c9f4 100644 --- a/ChangeLog.d/fix-msvc-version-guard-format-zu.txt +++ b/ChangeLog.d/fix-msvc-version-guard-format-zu.txt @@ -4,5 +4,6 @@ Bugfix with Visual Studio 2013 or MinGW. Fixes #10017. * Remove Everest Visual Studio 2010 compatibility headers, which could - interfere with standard CRT headers in certain situations, eg. when - building Mbed TLS with the .sln file shipped with the project. + shadow standard CRT headers inttypes.h and stdbool.h with incomplete + implementatios if placed on the include path, eg. when building Mbed TLS + with the .sln file shipped with the project. From a029387d1bc37cb475952bffef9087357d0c3162 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bence=20Sz=C3=A9pk=C3=BAti?= Date: Wed, 12 Mar 2025 16:43:38 +0100 Subject: [PATCH 11/12] Use dummy typedef instead of macro MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use a dummy definition of mbedtls_ms_time_t in builds without MBEDTLS_HAVE_TIME. Signed-off-by: Bence Szépkúti --- tests/suites/test_suite_debug.data | 2 +- tests/suites/test_suite_debug.function | 10 +++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/tests/suites/test_suite_debug.data b/tests/suites/test_suite_debug.data index b994e54c44..69e2c8bcf0 100644 --- a/tests/suites/test_suite_debug.data +++ b/tests/suites/test_suite_debug.data @@ -6,7 +6,7 @@ printf "%" MBEDTLS_PRINTF_LONGLONG, 0 printf_int_expr:(uintptr_t) "%" MBEDTLS_PRINTF_LONGLONG:sizeof(long long):0:"0" printf "%" MBEDTLS_PRINTF_MS_TIME, 0 -printf_int_expr:(uintptr_t) "%" MBEDTLS_PRINTF_MS_TIME:MBEDTLS_MS_TIME_SIZE:0:"0" +printf_int_expr:(uintptr_t) "%" MBEDTLS_PRINTF_MS_TIME:sizeof(mbedtls_ms_time_t):0:"0" Debug print msg (threshold 1, level 0) debug_print_msg_threshold:1:0:"MyFile":999:"MyFile(0999)\: Text message, 2 == 2\n" diff --git a/tests/suites/test_suite_debug.function b/tests/suites/test_suite_debug.function index f6d7611a63..b99e27d738 100644 --- a/tests/suites/test_suite_debug.function +++ b/tests/suites/test_suite_debug.function @@ -9,13 +9,9 @@ # include #endif -// Use a macro instead of sizeof(mbedtls_ms_time_t) because the expression store -// doesn't exclude entries based on depends_on headers, which would cause failures -// in builds without MBEDTLS_HAVE_TIME -#if defined(MBEDTLS_PLATFORM_MS_TIME_TYPE_MACRO) -# define MBEDTLS_MS_TIME_SIZE sizeof(MBEDTLS_PLATFORM_MS_TIME_TYPE_MACRO) -#else -# define MBEDTLS_MS_TIME_SIZE sizeof(int64_t) +// Dummy type for builds without MBEDTLS_HAVE_TIME +#if !defined(MBEDTLS_HAVE_TIME) +typedef int64_t mbedtls_ms_time_t; #endif struct buffer_data { From c64b7bc6643c8a0310105e6e00bf517b5ead384c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bence=20Sz=C3=A9pk=C3=BAti?= Date: Wed, 12 Mar 2025 17:08:46 +0100 Subject: [PATCH 12/12] Use an array of strings instead of pointer smuggling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Bence Szépkúti --- tests/suites/test_suite_debug.data | 7 +++---- tests/suites/test_suite_debug.function | 17 ++++++++++++++--- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/tests/suites/test_suite_debug.data b/tests/suites/test_suite_debug.data index 69e2c8bcf0..46b6be4581 100644 --- a/tests/suites/test_suite_debug.data +++ b/tests/suites/test_suite_debug.data @@ -1,12 +1,11 @@ -# printf_int_expr expects a smuggled string expression as its first parameter printf "%" MBEDTLS_PRINTF_SIZET, 0 -printf_int_expr:(uintptr_t) "%" MBEDTLS_PRINTF_SIZET:sizeof(size_t):0:"0" +printf_int_expr:PRINTF_SIZET:sizeof(size_t):0:"0" printf "%" MBEDTLS_PRINTF_LONGLONG, 0 -printf_int_expr:(uintptr_t) "%" MBEDTLS_PRINTF_LONGLONG:sizeof(long long):0:"0" +printf_int_expr:PRINTF_LONGLONG:sizeof(long long):0:"0" printf "%" MBEDTLS_PRINTF_MS_TIME, 0 -printf_int_expr:(uintptr_t) "%" MBEDTLS_PRINTF_MS_TIME:sizeof(mbedtls_ms_time_t):0:"0" +printf_int_expr:PRINTF_MS_TIME:sizeof(mbedtls_ms_time_t):0:"0" Debug print msg (threshold 1, level 0) debug_print_msg_threshold:1:0:"MyFile":999:"MyFile(0999)\: Text message, 2 == 2\n" diff --git a/tests/suites/test_suite_debug.function b/tests/suites/test_suite_debug.function index b99e27d738..9e53107626 100644 --- a/tests/suites/test_suite_debug.function +++ b/tests/suites/test_suite_debug.function @@ -14,6 +14,18 @@ typedef int64_t mbedtls_ms_time_t; #endif +typedef enum { + PRINTF_SIZET, + PRINTF_LONGLONG, + PRINTF_MS_TIME, +} printf_format_indicator_t; + +const char *const printf_formats[] = { + [PRINTF_SIZET] = "%" MBEDTLS_PRINTF_SIZET, + [PRINTF_LONGLONG] = "%" MBEDTLS_PRINTF_LONGLONG, + [PRINTF_MS_TIME] = "%" MBEDTLS_PRINTF_MS_TIME, +}; + struct buffer_data { char buf[2000]; char *ptr; @@ -81,8 +93,7 @@ static void noop_invalid_parameter_handler( */ /* BEGIN_CASE */ -void printf_int_expr(intmax_t smuggle_format_expr, /* TODO: teach test framework about string expressions */ - intmax_t sizeof_x, intmax_t x, char *result) +void printf_int_expr(int format_indicator, intmax_t sizeof_x, intmax_t x, char *result) { #if defined(_WIN32) /* Windows treats any invalid format specifiers passsed to the CRT as fatal assertion failures. @@ -95,7 +106,7 @@ void printf_int_expr(intmax_t smuggle_format_expr, /* TODO: teach test framework _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_DEBUG); #endif - const char *format = (char *) ((uintptr_t) smuggle_format_expr); + const char *format = printf_formats[format_indicator]; char *output = NULL; const size_t n = strlen(result);