git: 94f86eff72ed - main - uexterror_gettext: add tests for invalid formats

Brooks Davis <[email protected]>
Newsgroups gmane.os.freebsd.devel.cvs.src
Message-ID <6a86d9f5.41c73.6d0171f5__42742.6148134813$1787222558$gmane$org@gitrepo.freebsd.org>
The branch main has been updated by brooks:

URL: https://cgit.FreeBSD.org/src/commit/?id=94f86eff72ed43a38a12a41cd5945afe00c8199a

commit 94f86eff72ed43a38a12a41cd5945afe00c8199a
Author:     Brooks Davis <[email protected]>
AuthorDate: 2026-08-20 10:40:06 +0000
Commit:     Brooks Davis <[email protected]>
CommitDate: 2026-08-20 10:40:41 +0000

    uexterror_gettext: add tests for invalid formats
    
    Verify that unsupported, unterminated, and overly long formats output
    expected messages.
    
    Reviewed by:    kib
    Effort:         CHERI upstreaming
    Sponsored by:   Innovate UK
    Differential Revision:  https://reviews.freebsd.org/D58413
---
 tests/sys/kern/exterr_test.c | 66 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)

diff --git a/tests/sys/kern/exterr_test.c b/tests/sys/kern/exterr_test.c
index 75de58d27206..fc040c53517d 100644
--- a/tests/sys/kern/exterr_test.c
+++ b/tests/sys/kern/exterr_test.c
@@ -108,6 +108,71 @@ ATF_TC_BODY(uexterr_set, tc)
 	ATF_CHECK_STREQ("long 0xffffffffffffffff int 4294967295", exterr);
 }
 
+static void
+check_bad_fmt(const char *fmt)
+{
+	char exterr[UEXTERROR_MAXLEN];
+	char expected[UEXTERROR_MAXLEN];
+	int r;
+
+	sprintf(expected, "<unsupported-format>:%s", fmt);
+
+	errno = 0;
+	UEXTERROR(EINVAL, fmt, 0xAAAAAAAAAAAAAAAA);
+	ATF_CHECK_EQ(errno, EINVAL);
+	r = uexterr_gettext(exterr, sizeof(exterr));
+	ATF_CHECK_EQ(0, r);
+	ATF_CHECK_STREQ(expected, exterr);
+}
+
+ATF_TC(uexterr_bad_fmt);
+ATF_TC_HEAD(uexterr_bad_fmt, tc)
+{
+	atf_tc_set_md_var(tc, "descr", "Test invalid or unsupported formats");
+}
+ATF_TC_BODY(uexterr_bad_fmt, tc)
+{
+	char exterr[UEXTERROR_MAXLEN];
+	int r;
+	int target = 0;
+
+	/* Write gadget */
+	errno = 0;
+	UEXTERROR(EINVAL, "write to %n", (uintptr_t)&target);
+	ATF_CHECK_EQ_MSG(0, target, "Write via %%n happened");
+	ATF_CHECK_EQ(errno, EINVAL);
+	r = uexterr_gettext(exterr, sizeof(exterr));
+	ATF_CHECK_EQ(0, r);
+	ATF_CHECK_STREQ("write to <illegal-format>:%n", exterr);
+
+	/* Too long */
+	errno = 0;
+	UEXTERROR(EINVAL, "%llllllllllllllllllllllllllllllllllllllllllllllld",
+	    0xAAAAAAAAAAAAAAAA);
+	ATF_CHECK_EQ(errno, EINVAL);
+	r = uexterr_gettext(exterr, sizeof(exterr));
+	ATF_CHECK_EQ(0, r);
+	ATF_CHECK_STREQ("<format-too-large>", exterr);
+
+	/* Incomplete */
+	check_bad_fmt("%");
+	check_bad_fmt("%l");
+
+	/* Obsolete or nonsensical */
+	check_bad_fmt("%D");
+	check_bad_fmt("%O");
+	check_bad_fmt("%U");
+	check_bad_fmt("%f");
+	check_bad_fmt("%F");
+	check_bad_fmt("%g");
+	check_bad_fmt("%G");
+	check_bad_fmt("%a");
+	check_bad_fmt("%A");
+	check_bad_fmt("%S");
+	check_bad_fmt("%s");
+	check_bad_fmt("%m");
+}
+
 ATF_TC(gettext_noextended);
 ATF_TC_HEAD(gettext_noextended, tc)
 {
@@ -184,6 +249,7 @@ ATF_TP_ADD_TCS(tp)
 {
 	ATF_TP_ADD_TC(tp, gettext_extended);
 	ATF_TP_ADD_TC(tp, uexterr_set);
+	ATF_TP_ADD_TC(tp, uexterr_bad_fmt);
 	ATF_TP_ADD_TC(tp, gettext_noextended);
 	ATF_TP_ADD_TC(tp, gettext_noextended_after_extended);
 	ATF_TP_ADD_TC(tp, exterr_dynamic_categories);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.