Module Name: src
Committed By: rillig
Date: Wed Feb 14 20:51:17 UTC 2024
Modified Files:
src/tests/lib/libutil: t_snprintb.c
Log Message:
tests/libutil/snprintb_m: add tests for small line length
To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/tests/lib/libutil/t_snprintb.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/libutil/t_snprintb.c
diff -u src/tests/lib/libutil/t_snprintb.c:1.12 src/tests/lib/libutil/t_snprintb.c:1.13
--- src/tests/lib/libutil/t_snprintb.c:1.12 Sat Jan 27 21:42:29 2024
+++ src/tests/lib/libutil/t_snprintb.c Wed Feb 14 20:51:17 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: t_snprintb.c,v 1.12 2024/01/27 21:42:29 rillig Exp $ */
+/* $NetBSD: t_snprintb.c,v 1.13 2024/02/14 20:51:17 rillig Exp $ */
/*
* Copyright (c) 2002, 2004, 2008, 2010, 2024 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2008, 2010\
The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_snprintb.c,v 1.12 2024/01/27 21:42:29 rillig Exp $");
+__RCSID("$NetBSD: t_snprintb.c,v 1.13 2024/02/14 20:51:17 rillig Exp $");
#include <stdio.h>
#include <string.h>
@@ -573,36 +573,44 @@ ATF_TC_BODY(snprintb, tc)
static void
h_snprintb_m_loc(const char *file, size_t line,
- const char *fmt, size_t fmtlen, uint64_t val, int line_max,
- const char *res, size_t reslen)
+ size_t bufsize, const char *fmt, size_t fmtlen, uint64_t val, size_t max,
+ size_t exp_rv, const char *res, size_t reslen)
{
char buf[1024];
- int rv = snprintb_m(buf, sizeof(buf), fmt, val, line_max);
+ ATF_REQUIRE(bufsize > 1);
+ ATF_REQUIRE(bufsize <= sizeof(buf));
- ATF_REQUIRE_MSG(rv >= 0, "formatting %jx with '%s' returns error %d",
+ memset(buf, 'Z', sizeof(buf));
+ int rv = snprintb_m(buf, bufsize, fmt, val, max);
+ ATF_REQUIRE_MSG(rv >= 0,
+ "formatting %jx with '%s' returns error %d",
(uintmax_t)val, vis_arr(fmt, fmtlen), rv);
- size_t buflen = rv;
+ size_t total = rv;
ATF_CHECK_MSG(
- buflen == reslen && memcmp(buf, res, reslen) == 0,
+ total == exp_rv && memcmp(buf, res, reslen) == 0,
"failed:\n"
"\ttest case: %s:%zu\n"
"\tformat: %s\n"
"\tvalue: %#jx\n"
+ "\tmax: %zu\n"
"\twant: %zu bytes %s\n"
"\thave: %zu bytes %s\n",
file, line,
vis_arr(fmt, fmtlen),
(uintmax_t)val,
- reslen, vis_arr(res, reslen),
- buflen, vis_arr(buf, buflen));
+ max,
+ exp_rv, vis_arr(res, reslen),
+ total, vis_arr(buf, reslen));
}
-#define h_snprintb_m(fmt, val, line_max, res) \
+#define h_snprintb_m_len(bufsize, fmt, val, line_max, exp_rv, res) \
h_snprintb_m_loc(__FILE__, __LINE__, \
- fmt, sizeof(fmt) - 1, val, line_max, \
- res, sizeof(res) - 1)
+ bufsize, fmt, sizeof(fmt) - 1, val, line_max, \
+ exp_rv, res, sizeof(res) - 1)
+#define h_snprintb_m(fmt, val, max, res) \
+ h_snprintb_m_len(1024, fmt, val, max, sizeof(res) - 1, res)
ATF_TC(snprintb_m);
ATF_TC_HEAD(snprintb_m, tc)
@@ -611,6 +619,68 @@ ATF_TC_HEAD(snprintb_m, tc)
}
ATF_TC_BODY(snprintb_m, tc)
{
+ // old-style format, small maximum line length
+ h_snprintb_m_len(
+ 68,
+ "\020"
+ "\001bit1"
+ "\002bit2"
+ "\003bit3",
+ 0xffff,
+ 6,
+ 143,
+ /* 0 */ "0xffff>\0"
+ /* 8 */ "0xffff<>\0"
+ /* 17 */ "0xffffb>\0"
+ /* 26 */ "0xffffi>\0"
+ /* 35 */ "0xfffft>\0"
+ /* 44 */ "0xffff1>\0"
+ /* 53 */ "0xffff<>\0"
+ /* 62 */ "0xff\0"
+ /* 67 */ "ZZZ"
+ /* 70 */ "ZZZZZZZZZZ"
+ /* 80 */ "ZZZZZZZZZZ"
+ /* 90 */ "ZZZZZZZZZZ"
+ /* 100 */ "ZZZZZZZZZZ"
+ /* 110 */ "ZZZZZZ"
+ /* 116 */ "\0\0" /* FIXME: out-of-bounds write */
+ /* 118 */ "ZZ"
+ /* 120 */ "ZZZZZZZZZZ"
+ /* 130 */ "ZZZZZZZZZZ"
+ /* 140 */ "ZZZZZZZZZZ"
+ );
+
+ // new-style format, small maximum line length
+ h_snprintb_m_len(
+ 68,
+ "\177\020"
+ "b\000bit1\0"
+ "b\001bit2\0"
+ "b\002bit3\0",
+ 0xffff,
+ 6,
+ 143,
+ /* 0 */ "0xffff>\0"
+ /* 8 */ "0xffff<>\0"
+ /* 17 */ "0xffffb>\0"
+ /* 26 */ "0xffffi>\0"
+ /* 35 */ "0xfffft>\0"
+ /* 44 */ "0xffff1>\0"
+ /* 53 */ "0xffff<>\0"
+ /* 62 */ "0xff\0"
+ /* 67 */ "ZZZ"
+ /* 70 */ "ZZZZZZZZZZ"
+ /* 80 */ "ZZZZZZZZZZ"
+ /* 90 */ "ZZZZZZZZZZ"
+ /* 100 */ "ZZZZZZZZZZ"
+ /* 110 */ "ZZZZZZ"
+ /* 116 */ "\0\0" /* FIXME: out-of-bounds write */
+ /* 118 */ "ZZ"
+ /* 120 */ "ZZZZZZZZZZ"
+ /* 130 */ "ZZZZZZZZZZ"
+ /* 140 */ "ZZZZZZZZZZ"
+ );
+
h_snprintb_m(
"\177\020"
"b\0LSB\0"