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