Module Name: src
Committed By: rillig
Date: Fri Apr 12 05:17:48 UTC 2024
Modified Files:
src/tests/usr.bin/xlint/lint1: msg_363.c msg_371.c msg_376.c
src/usr.bin/xlint/lint1: cksnprintb.c err.c
Log Message:
lint: in snprintb, warn about all escaped characters in descriptions
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/tests/usr.bin/xlint/lint1/msg_363.c
cvs rdiff -u -r1.1 -r1.2 src/tests/usr.bin/xlint/lint1/msg_371.c
cvs rdiff -u -r1.2 -r1.3 src/tests/usr.bin/xlint/lint1/msg_376.c
cvs rdiff -u -r1.12 -r1.13 src/usr.bin/xlint/lint1/cksnprintb.c
cvs rdiff -u -r1.239 -r1.240 src/usr.bin/xlint/lint1/err.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/usr.bin/xlint/lint1/msg_363.c
diff -u src/tests/usr.bin/xlint/lint1/msg_363.c:1.4 src/tests/usr.bin/xlint/lint1/msg_363.c:1.5
--- src/tests/usr.bin/xlint/lint1/msg_363.c:1.4 Sun Mar 3 16:09:01 2024
+++ src/tests/usr.bin/xlint/lint1/msg_363.c Fri Apr 12 05:17:48 2024
@@ -1,12 +1,13 @@
-/* $NetBSD: msg_363.c,v 1.4 2024/03/03 16:09:01 rillig Exp $ */
+/* $NetBSD: msg_363.c,v 1.5 2024/04/12 05:17:48 rillig Exp $ */
# 3 "msg_363.c"
-// Test for message: non-printing character '%.*s' in description '%.*s' [363]
+// Test for message: escaped character '%.*s' in description of conversion '%.*s' [363]
/*
* The purpose of snprintb is to produce a printable, visible representation
- * of a binary number, therefore the description should consist of visible
- * characters only.
+ * of a binary number, therefore the description should consist of simple
+ * characters only, and these should not need to be escaped. If they are,
+ * it's often due to a typo, such as a missing terminating '\0'.
*/
/* lint1-extra-flags: -X 351 */
@@ -22,17 +23,17 @@ old_style_description(unsigned u32)
char buf[64];
/* expect+6: warning: bit position '\t' in '\tprint' should be escaped as octal or hex [369] */
- /* expect+5: warning: non-printing character '\377' in description 'able\377' [363] */
+ /* expect+5: warning: escaped character '\377' in description of conversion '\nable\377' [363] */
/* expect+4: warning: bit position '\n' in '\nable\377' should be escaped as octal or hex [369] */
snprintb(buf, sizeof(buf),
"\020"
"\001non\tprint\nable\377",
u32);
- /* expect+10: warning: non-printing character '\177' in description '\177' [363] */
- /* expect+9: warning: non-printing character '\177' in description 'aa""""\177' [363] */
- /* expect+8: warning: non-printing character '\177' in description 'bb""\177' [363] */
- /* expect+7: warning: non-printing character '\177' in description 'cc\177' [363] */
+ /* expect+10: warning: escaped character '\177' in description of conversion '\002""\177' [363] */
+ /* expect+9: warning: escaped character '\177' in description of conversion '\003aa""""\177' [363] */
+ /* expect+8: warning: escaped character '\177' in description of conversion '\004""bb""\177' [363] */
+ /* expect+7: warning: escaped character '\177' in description of conversion '\005""""cc\177' [363] */
snprintb(buf, sizeof(buf),
"\020"
"\002""\177"
Index: src/tests/usr.bin/xlint/lint1/msg_371.c
diff -u src/tests/usr.bin/xlint/lint1/msg_371.c:1.1 src/tests/usr.bin/xlint/lint1/msg_371.c:1.2
--- src/tests/usr.bin/xlint/lint1/msg_371.c:1.1 Fri Mar 1 19:39:29 2024
+++ src/tests/usr.bin/xlint/lint1/msg_371.c Fri Apr 12 05:17:48 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: msg_371.c,v 1.1 2024/03/01 19:39:29 rillig Exp $ */
+/* $NetBSD: msg_371.c,v 1.2 2024/04/12 05:17:48 rillig Exp $ */
# 3 "msg_371.c"
// Test for message: bit position '%.*s' (%ju) in '%.*s' out of range %u..%u [371]
@@ -21,9 +21,10 @@ example(unsigned u32, uint64_t u64)
{
char buf[64];
- /* expect+11: warning: bit position '\000' (0) in '\000zero' out of range 1..32 [371] */
- /* expect+10: warning: non-printing character '\177' in description 'bit32""\041bit33""\177' [363] */
- /* expect+9: warning: non-printing character '\377' in description 'bit32""\041bit33""\177bit127""\377' [363] */
+ /* expect+12: warning: bit position '\000' (0) in '\000zero' out of range 1..32 [371] */
+ /* expect+11: warning: escaped character '\041' in description of conversion '\040bit32""\041' [363] */
+ /* expect+10: warning: escaped character '\177' in description of conversion '\040bit32""\041bit33""\177' [363] */
+ /* expect+9: warning: escaped character '\377' in description of conversion '\040bit32""\041bit33""\177bit127""\377' [363] */
snprintb(buf, sizeof(buf),
"\020"
"\000zero"
Index: src/tests/usr.bin/xlint/lint1/msg_376.c
diff -u src/tests/usr.bin/xlint/lint1/msg_376.c:1.2 src/tests/usr.bin/xlint/lint1/msg_376.c:1.3
--- src/tests/usr.bin/xlint/lint1/msg_376.c:1.2 Sun Mar 3 00:50:41 2024
+++ src/tests/usr.bin/xlint/lint1/msg_376.c Fri Apr 12 05:17:48 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: msg_376.c,v 1.2 2024/03/03 00:50:41 rillig Exp $ */
+/* $NetBSD: msg_376.c,v 1.3 2024/04/12 05:17:48 rillig Exp $ */
# 3 "msg_376.c"
// Test for message: '%.*s' overlaps earlier '%.*s' on bit %u [376]
@@ -20,8 +20,6 @@ example(unsigned u32, uint64_t u64)
char buf[64];
// In the old-style format, bit positions are 1-based.
- /* expect+10: warning: '\x01lsb' overlaps earlier '\001lsb' on bit 1 [376] */
- /* expect+9: warning: '\x20msb""\041oob""\x21oob' overlaps earlier '\040msb' on bit 32 [376] */
snprintb(buf, sizeof(buf),
"\020"
"\001lsb"
@@ -30,6 +28,10 @@ example(unsigned u32, uint64_t u64)
"\x20msb"
"\041oob"
"\x21oob",
+ /* expect+4: warning: '\x01lsb' overlaps earlier '\001lsb' on bit 1 [376] */
+ /* expect+3: warning: escaped character '\041' in description of conversion '\x20msb""\041' [363] */
+ /* expect+2: warning: escaped character '\x21' in description of conversion '\x20msb""\041oob""\x21' [363] */
+ /* expect+1: warning: '\x20msb""\041oob""\x21oob' overlaps earlier '\040msb' on bit 32 [376] */
u32);
// In the new-style format, bit positions are 0-based.
Index: src/usr.bin/xlint/lint1/cksnprintb.c
diff -u src/usr.bin/xlint/lint1/cksnprintb.c:1.12 src/usr.bin/xlint/lint1/cksnprintb.c:1.13
--- src/usr.bin/xlint/lint1/cksnprintb.c:1.12 Mon Mar 25 22:37:43 2024
+++ src/usr.bin/xlint/lint1/cksnprintb.c Fri Apr 12 05:17:48 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: cksnprintb.c,v 1.12 2024/03/25 22:37:43 rillig Exp $ */
+/* $NetBSD: cksnprintb.c,v 1.13 2024/04/12 05:17:48 rillig Exp $ */
/*-
* Copyright (c) 2024 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: cksnprintb.c,v 1.12 2024/03/25 22:37:43 rillig Exp $");
+__RCSID("$NetBSD: cksnprintb.c,v 1.13 2024/04/12 05:17:48 rillig Exp $");
#endif
#include <stdbool.h>
@@ -134,27 +134,23 @@ check_bit(checker *ck, uint64_t dir_lsb,
}
static bool
-parse_description(checker *ck)
+parse_description(checker *ck, const quoted_iterator *dir)
{
- size_t descr_start = 0 /* dummy */;
- bool seen_descr = false;
+ size_t descr_start = 0;
quoted_iterator it = ck->it;
uint64_t end_marker = ck->new_style ? 0 : 32;
while (quoted_next(ck->fmt, &it) && it.value > end_marker) {
ck->it = it;
- if (!seen_descr)
+ if (descr_start == 0)
descr_start = it.start;
- seen_descr = true;
- if (it.escaped && !isprint((unsigned char)it.value)) {
- /* non-printing character '%.*s' in description ... */
+ if (it.escaped)
+ /* escaped character '%.*s' in description ... */
warning(363,
len(it), start(it, ck->fmt),
- (int)(it.end - descr_start),
- ck->fmt->data + descr_start);
- }
+ range(*dir, it), start(*dir, ck->fmt));
}
- return seen_descr;
+ return descr_start > 0;
}
static bool
@@ -217,7 +213,7 @@ check_conversion(checker *ck)
warning(362, len(dir), start(dir, fmt));
bool needs_descr = !(new_style && dir.value == 'F');
- bool seen_descr = parse_description(ck);
+ bool seen_descr = parse_description(ck, &dir);
bool seen_null = new_style
&& quoted_next(ck->fmt, &ck->it) && ck->it.value == 0;
Index: src/usr.bin/xlint/lint1/err.c
diff -u src/usr.bin/xlint/lint1/err.c:1.239 src/usr.bin/xlint/lint1/err.c:1.240
--- src/usr.bin/xlint/lint1/err.c:1.239 Sat Mar 30 17:23:13 2024
+++ src/usr.bin/xlint/lint1/err.c Fri Apr 12 05:17:48 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: err.c,v 1.239 2024/03/30 17:23:13 rillig Exp $ */
+/* $NetBSD: err.c,v 1.240 2024/04/12 05:17:48 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: err.c,v 1.239 2024/03/30 17:23:13 rillig Exp $");
+__RCSID("$NetBSD: err.c,v 1.240 2024/04/12 05:17:48 rillig Exp $");
#endif
#include <limits.h>
@@ -418,7 +418,7 @@ static const char *const msgs[] = {
"missing new-style number base after '\\177'", // 360
"number base '%.*s' is %ju, must be 8, 10 or 16", // 361
"conversion '%.*s' should not be escaped", // 362
- "non-printing character '%.*s' in description '%.*s'", // 363
+ "escaped character '%.*s' in description of conversion '%.*s'", // 363
"missing bit position after '%.*s'", // 364
"missing field width after '%.*s'", // 365
"missing '\\0' at the end of '%.*s'", // 366