[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20260203103000.20206-5-david.laight.linux@gmail.com>
Date: Tue, 3 Feb 2026 10:29:52 +0000
From: david.laight.linux@...il.com
To: Willy Tarreau <w@....eu>,
Thomas Weißschuh <linux@...ssschuh.net>,
linux-kernel@...r.kernel.org,
Cheng Li <lechain@...il.com>
Cc: David Laight <david.laight.linux@...il.com>
Subject: [PATCH next 04/12] selftests/nolibc: Improve reporting of vfprintf() errors
From: David Laight <david.laight.linux@...il.com>
Check the string matches before checking the returned length.
Only print the string once when it matches.
Normally the length is that of the expected string, make it easier
to write tests by treating a length of zero as being that of the
expected output.
Additionally check that nothing beyond the end is written.
Signed-off-by: David Laight <david.laight.linux@...il.com>
---
tools/testing/selftests/nolibc/nolibc-test.c | 27 ++++++++++++++++----
1 file changed, 22 insertions(+), 5 deletions(-)
diff --git a/tools/testing/selftests/nolibc/nolibc-test.c b/tools/testing/selftests/nolibc/nolibc-test.c
index 3c5a226dad3a..9378a1f26c34 100644
--- a/tools/testing/selftests/nolibc/nolibc-test.c
+++ b/tools/testing/selftests/nolibc/nolibc-test.c
@@ -1567,28 +1567,45 @@ int run_stdlib(int min, int max)
static int expect_vfprintf(int llen, int c, const char *expected, const char *fmt, ...)
{
+ unsigned int i;
char buf[100];
va_list args;
ssize_t w;
int ret;
+ for (i = 0; i < sizeof(buf); i++)
+ buf[i] = i;
va_start(args, fmt);
- /* Only allow writing 21 bytes, to test truncation */
+ /* Only allow writing 20 bytes, to test truncation */
w = vsnprintf(buf, 21, fmt, args);
va_end(args);
+ llen += printf(" \"%s\"", buf);
+ ret = strcmp(expected, buf);
+ if (ret) {
+ llen += printf(" should be \"%s\"", expected);
+ result(llen, FAIL);
+ return 1;
+ }
+ if (!c)
+ c = strlen(expected);
if (w != c) {
llen += printf(" written(%d) != %d", (int)w, c);
result(llen, FAIL);
return 1;
}
- llen += printf(" \"%s\" = \"%s\"", expected, buf);
- ret = strncmp(expected, buf, c);
+ for (i = c + 1; i < sizeof(buf); i++) {
+ if (buf[i] - i) {
+ llen += printf(" overwrote buf[%d] with 0x%x", i, buf[i]);
+ result(llen, FAIL);
+ return 1;
+ }
+ }
- result(llen, ret ? FAIL : OK);
- return ret;
+ result(llen, OK);
+ return 0;
}
static int test_scanf(void)
--
2.39.5
Powered by blists - more mailing lists