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

Reply via email to