]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
selftests/nolibc: add test for snprintf() truncation
authorThomas Weißschuh <thomas.weissschuh@linutronix.de>
Fri, 11 Apr 2025 09:00:54 +0000 (11:00 +0200)
committerThomas Weißschuh <linux@weissschuh.net>
Tue, 22 Apr 2025 08:59:06 +0000 (10:59 +0200)
Now that we have a proper snprintf() implementation,
make sure truncation is handled properly.

Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
Acked-by: Willy Tarreau <w@1wt.eu>
tools/testing/selftests/nolibc/nolibc-test.c

index 5fb4319545d51d7fd7c7630b7cfc702435890f42..33cd64a1b768699148b2c594cb0f1c224ee9a20e 100644 (file)
@@ -1306,7 +1306,8 @@ static int expect_vfprintf(int llen, int c, const char *expected, const char *fm
 
 
        va_start(args, fmt);
-       w = vsnprintf(buf, sizeof(buf), fmt, args);
+       /* Only allow writing 21 bytes, to test truncation */
+       w = vsnprintf(buf, 21, fmt, args);
        va_end(args);
 
        if (w != c) {
@@ -1412,6 +1413,7 @@ static int run_printf(int min, int max)
                CASE_TEST(pointer);      EXPECT_VFPRINTF(3, "0x1", "%p", (void *) 0x1); break;
                CASE_TEST(uintmax_t);    EXPECT_VFPRINTF(20, "18446744073709551615", "%ju", 0xffffffffffffffffULL); break;
                CASE_TEST(intmax_t);     EXPECT_VFPRINTF(20, "-9223372036854775807", "%jd", 0x8000000000000001LL); break;
+               CASE_TEST(truncation);   EXPECT_VFPRINTF(25, "01234567890123456789", "%s", "0123456789012345678901234"); break;
                CASE_TEST(scanf);        EXPECT_ZR(1, test_scanf()); break;
                case __LINE__:
                        return ret; /* must be last */