From 737e8ea18328c0606213e48838b25623059f7431 Mon Sep 17 00:00:00 2001 From: Sebastian Pipping Date: Fri, 26 Jan 2024 15:31:52 +0100 Subject: [PATCH] tests/misc_tests.c: Address clang-tidy 18 warning EnumCastOutOfRange clang-tidy output was: > [..]/libexpat/expat/tests/misc_tests.c:112:23: note: The value '-1' provided to the cast expression is not in the valid range of values for 'XML_Error' > 112 | if (XML_ErrorString((enum XML_Error) - 1) != NULL) > | ^~~~~~~~~~~~~~~~~~~~ > [..]/libexpat/expat/tests/misc_tests.c:114:23: error: The value '100' provided to the cast expression is not in the valid range of values for 'XML_Error' [clang-analyzer-optin.core.EnumCastOutOfRange,-warnings-as-errors] > 114 | if (XML_ErrorString((enum XML_Error)100) != NULL) > | ^~~~~~~~~~~~~~~~~~~ --- expat/tests/misc_tests.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/expat/tests/misc_tests.c b/expat/tests/misc_tests.c index 029572d1..377bc7ae 100644 --- a/expat/tests/misc_tests.c +++ b/expat/tests/misc_tests.c @@ -107,12 +107,34 @@ START_TEST(test_misc_null_parser) { } END_TEST +#if defined(__has_feature) +# if __has_feature(undefined_behavior_sanitizer) +# define EXPAT_TESTS_UBSAN 1 +# else +# define EXPAT_TESTS_UBSAN 0 +# endif +#else +# define EXPAT_TESTS_UBSAN 0 +#endif + /* Test that XML_ErrorString rejects out-of-range codes */ START_TEST(test_misc_error_string) { - if (XML_ErrorString((enum XML_Error) - 1) != NULL) +#if ! EXPAT_TESTS_UBSAN // because this would trigger UBSan + union { + enum XML_Error xml_error; + int integer; + } trickery; + + assert_true(sizeof(enum XML_Error) == sizeof(int)); // self-test + + trickery.integer = -1; + if (XML_ErrorString(trickery.xml_error) != NULL) fail("Negative error code not rejected"); - if (XML_ErrorString((enum XML_Error)100) != NULL) + + trickery.integer = 100; + if (XML_ErrorString(trickery.xml_error) != NULL) fail("Large error code not rejected"); +#endif } END_TEST