Module Name: src Committed By: riastradh Date: Fri Mar 28 23:01:51 UTC 2025
Modified Files: src/tests/lib/libc/gen: t_ctype.c Log Message: t_ctype: Factor loop out of macro-generated functions. No functional change intended. PR lib/58208: ctype(3) provides poor runtime feedback of abuse To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/tests/lib/libc/gen/t_ctype.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/tests/lib/libc/gen/t_ctype.c diff -u src/tests/lib/libc/gen/t_ctype.c:1.6 src/tests/lib/libc/gen/t_ctype.c:1.7 --- src/tests/lib/libc/gen/t_ctype.c:1.6 Fri Mar 28 22:52:35 2025 +++ src/tests/lib/libc/gen/t_ctype.c Fri Mar 28 23:01:51 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: t_ctype.c,v 1.6 2025/03/28 22:52:35 riastradh Exp $ */ +/* $NetBSD: t_ctype.c,v 1.7 2025/03/28 23:01:51 riastradh Exp $ */ /*- * Copyright (c) 2025 The NetBSD Foundation, Inc. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: t_ctype.c,v 1.6 2025/03/28 22:52:35 riastradh Exp $"); +__RCSID("$NetBSD: t_ctype.c,v 1.7 2025/03/28 23:01:51 riastradh Exp $"); #include <atf-c.h> #include <ctype.h> @@ -101,6 +101,27 @@ test_abuse(const char *name, int (*ctype } static void +test_abuse_in_locales(const char *name, int (*ctypefn)(int)) +{ + size_t i; + + for (i = 0; i < __arraycount(locales); i++) { + char buf[128]; + + ATF_REQUIRE_MSG(setlocale(LC_CTYPE, locales[i]) != NULL, + "locales[i]=%s", locales[i]); + snprintf(buf, sizeof(buf), "[%s]%s", locales[i], name); + if (strcmp(locales[i], "C") == 0) { + atf_tc_expect_fail("PR lib/58208: ctype(3)" + " provides poor runtime feedback of abuse"); + } + test_abuse(buf, ctypefn); + if (strcmp(locales[i], "C") == 0) + atf_tc_expect_pass(); + } +} + +static void test_use(const char *name, int (*ctypefn)(int)) { volatile int ch; /* for longjmp */ @@ -794,26 +815,11 @@ ATF_TC_HEAD(abuse_##FN##_macro_locale, t } \ ATF_TC_BODY(abuse_##FN##_macro_locale, tc) \ { \ - size_t i; \ - \ if (CHAR_UNSIGNED) { \ atf_tc_skip("runtime ctype(3) abuse is impossible with" \ " unsigned char"); \ } \ - for (i = 0; i < __arraycount(locales); i++) { \ - char buf[128]; \ - \ - ATF_REQUIRE_MSG(setlocale(LC_CTYPE, locales[i]) != NULL, \ - "locales[i]=%s", locales[i]); \ - snprintf(buf, sizeof(buf), "[%s]%s", locales[i], #FN); \ - if (strcmp(locales[i], "C") == 0) { \ - atf_tc_expect_fail("PR lib/58208: ctype(3)" \ - " provides poor runtime feedback of abuse"); \ - } \ - test_abuse(buf, &FN##_wrapper); \ - if (strcmp(locales[i], "C") == 0) \ - atf_tc_expect_pass(); \ - } \ + test_abuse_in_locales(#FN, &FN##_wrapper); \ } \ ATF_TC(abuse_##FN##_function_locale); \ ATF_TC_HEAD(abuse_##FN##_function_locale, tc) \ @@ -823,26 +829,11 @@ ATF_TC_HEAD(abuse_##FN##_function_locale } \ ATF_TC_BODY(abuse_##FN##_function_locale, tc) \ { \ - size_t i; \ - \ if (CHAR_UNSIGNED) { \ atf_tc_skip("runtime ctype(3) abuse is impossible with" \ " unsigned char"); \ } \ - for (i = 0; i < __arraycount(locales); i++) { \ - char buf[128]; \ - \ - ATF_REQUIRE_MSG(setlocale(LC_CTYPE, locales[i]) != NULL, \ - "locales[i]=%s", locales[i]); \ - snprintf(buf, sizeof(buf), "[%s]%s", locales[i], #FN); \ - if (strcmp(locales[i], "C") == 0) { \ - atf_tc_expect_fail("PR lib/58208: ctype(3)" \ - " provides poor runtime feedback of abuse"); \ - } \ - test_abuse(buf, &FN); \ - if (strcmp(locales[i], "C") == 0) \ - atf_tc_expect_pass(); \ - } \ + test_abuse_in_locales(#FN, &FN); \ } #define ADD_TEST_USE(TP, FN) do \