Module Name: src Committed By: rillig Date: Sat Feb 3 20:10:11 UTC 2024
Modified Files: src/distrib/sets/lists/tests: mi src/tests/usr.bin/xlint/lint1: msg_077.c t_usage.sh src/usr.bin/xlint/lint1: err.c lex.c Added Files: src/tests/usr.bin/xlint/lint1: msg_356.c Log Message: lint: warn about short octal escape followed by '8' or '9' These mistakes is typically found in snprintb format directives but is probably a typo everywhere else as well. To generate a diff of this commit: cvs rdiff -u -r1.1304 -r1.1305 src/distrib/sets/lists/tests/mi cvs rdiff -u -r1.8 -r1.9 src/tests/usr.bin/xlint/lint1/msg_077.c cvs rdiff -u -r0 -r1.1 src/tests/usr.bin/xlint/lint1/msg_356.c cvs rdiff -u -r1.14 -r1.15 src/tests/usr.bin/xlint/lint1/t_usage.sh cvs rdiff -u -r1.223 -r1.224 src/usr.bin/xlint/lint1/err.c cvs rdiff -u -r1.212 -r1.213 src/usr.bin/xlint/lint1/lex.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/distrib/sets/lists/tests/mi diff -u src/distrib/sets/lists/tests/mi:1.1304 src/distrib/sets/lists/tests/mi:1.1305 --- src/distrib/sets/lists/tests/mi:1.1304 Fri Feb 2 23:30:38 2024 +++ src/distrib/sets/lists/tests/mi Sat Feb 3 20:10:10 2024 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.1304 2024/02/02 23:30:38 rillig Exp $ +# $NetBSD: mi,v 1.1305 2024/02/03 20:10:10 rillig Exp $ # # Note: don't delete entries from here - mark them as "obsolete" instead. # @@ -7469,6 +7469,7 @@ ./usr/tests/usr.bin/xlint/lint1/msg_353.c tests-usr.bin-tests compattestfile,atf ./usr/tests/usr.bin/xlint/lint1/msg_354.c tests-usr.bin-tests compattestfile,atf ./usr/tests/usr.bin/xlint/lint1/msg_355.c tests-usr.bin-tests compattestfile,atf +./usr/tests/usr.bin/xlint/lint1/msg_356.c tests-usr.bin-tests compattestfile,atf ./usr/tests/usr.bin/xlint/lint1/op_colon.c tests-usr.bin-tests compattestfile,atf ./usr/tests/usr.bin/xlint/lint1/op_colon.exp tests-obsolete obsolete,atf ./usr/tests/usr.bin/xlint/lint1/op_shl_lp64.c tests-usr.bin-tests compattestfile,atf Index: src/tests/usr.bin/xlint/lint1/msg_077.c diff -u src/tests/usr.bin/xlint/lint1/msg_077.c:1.8 src/tests/usr.bin/xlint/lint1/msg_077.c:1.9 --- src/tests/usr.bin/xlint/lint1/msg_077.c:1.8 Sun Jul 9 11:01:27 2023 +++ src/tests/usr.bin/xlint/lint1/msg_077.c Sat Feb 3 20:10:10 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: msg_077.c,v 1.8 2023/07/09 11:01:27 rillig Exp $ */ +/* $NetBSD: msg_077.c,v 1.9 2024/02/03 20:10:10 rillig Exp $ */ # 3 "msg_077.c" /* Test for message: bad octal digit '%c' [77] */ @@ -23,5 +23,6 @@ char single_digit = '\8'; * anyway. * https://mail-index.netbsd.org/tech-toolchain/2021/03/16/msg003933.html */ +/* expect+2: warning: short octal escape '\0' followed by digit '8' [356] */ /* expect+1: warning: multi-character character constant [294] */ char several_digits = '\08'; Index: src/tests/usr.bin/xlint/lint1/t_usage.sh diff -u src/tests/usr.bin/xlint/lint1/t_usage.sh:1.14 src/tests/usr.bin/xlint/lint1/t_usage.sh:1.15 --- src/tests/usr.bin/xlint/lint1/t_usage.sh:1.14 Sat Jan 20 10:02:31 2024 +++ src/tests/usr.bin/xlint/lint1/t_usage.sh Sat Feb 3 20:10:11 2024 @@ -1,4 +1,4 @@ -# $NetBSD: t_usage.sh,v 1.14 2024/01/20 10:02:31 rillig Exp $ +# $NetBSD: t_usage.sh,v 1.15 2024/02/03 20:10:11 rillig Exp $ # # Copyright (c) 2023 The NetBSD Foundation, Inc. # All rights reserved. @@ -44,8 +44,8 @@ suppress_messages_body() # Larger than the largest known message. atf_check \ -s 'exit:1' \ - -e "inline:lint1: invalid message ID '356'\n" \ - "$lint1" -X 356 code.c /dev/null + -e "inline:lint1: invalid message ID '357'\n" \ + "$lint1" -X 357 code.c /dev/null # Whitespace is not allowed before a message ID. atf_check \ Index: src/usr.bin/xlint/lint1/err.c diff -u src/usr.bin/xlint/lint1/err.c:1.223 src/usr.bin/xlint/lint1/err.c:1.224 --- src/usr.bin/xlint/lint1/err.c:1.223 Sat Jan 20 10:02:31 2024 +++ src/usr.bin/xlint/lint1/err.c Sat Feb 3 20:10:10 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: err.c,v 1.223 2024/01/20 10:02:31 rillig Exp $ */ +/* $NetBSD: err.c,v 1.224 2024/02/03 20:10:10 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.223 2024/01/20 10:02:31 rillig Exp $"); +__RCSID("$NetBSD: err.c,v 1.224 2024/02/03 20:10:10 rillig Exp $"); #endif #include <limits.h> @@ -411,6 +411,7 @@ static const char *const msgs[] = { "empty initializer braces require C23 or later", /* 353 */ "'_Static_assert' requires C11 or later", /* 354 */ "'_Static_assert' without message requires C23 or later", /* 355 */ + "short octal escape '%.*s' followed by digit '%c'", /* 356 */ }; static bool is_suppressed[sizeof(msgs) / sizeof(msgs[0])]; Index: src/usr.bin/xlint/lint1/lex.c diff -u src/usr.bin/xlint/lint1/lex.c:1.212 src/usr.bin/xlint/lint1/lex.c:1.213 --- src/usr.bin/xlint/lint1/lex.c:1.212 Sat Feb 3 19:25:16 2024 +++ src/usr.bin/xlint/lint1/lex.c Sat Feb 3 20:10:10 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: lex.c,v 1.212 2024/02/03 19:25:16 rillig Exp $ */ +/* $NetBSD: lex.c,v 1.213 2024/02/03 20:10:10 rillig Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. @@ -38,7 +38,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: lex.c,v 1.212 2024/02/03 19:25:16 rillig Exp $"); +__RCSID("$NetBSD: lex.c,v 1.213 2024/02/03 20:10:10 rillig Exp $"); #endif #include <ctype.h> @@ -931,8 +931,8 @@ hex_escape: static void check_quoted(const buffer *buf, bool complete, char delim) { - quoted_iterator it = { .start = 0 }; - while (quoted_next(buf, &it)) { + quoted_iterator it = { .start = 0 }, prev = it; + for (; quoted_next(buf, &it); prev = it) { if (it.missing_hex_digits) /* no hex digits follow \x */ error(74); @@ -975,6 +975,11 @@ check_quoted(const buffer *buf, bool com /* invisible character U+%04X in %s */ query_message(17, (unsigned)it.value, delim == '"' ? "string literal" : "character constant"); + if (prev.octal_digits > 0 && prev.octal_digits < 3 + && !it.escaped && it.value >= '8' && it.value <= '9') + /* short octal escape '%.*s' followed by digit '%c' */ + warning(356, (int)(prev.i - prev.start), + buf->data + prev.start, buf->data[it.start]); } if (it.unescaped_newline) /* newline in string or char constant */ Added files: Index: src/tests/usr.bin/xlint/lint1/msg_356.c diff -u /dev/null src/tests/usr.bin/xlint/lint1/msg_356.c:1.1 --- /dev/null Sat Feb 3 20:10:11 2024 +++ src/tests/usr.bin/xlint/lint1/msg_356.c Sat Feb 3 20:10:11 2024 @@ -0,0 +1,35 @@ +/* $NetBSD: msg_356.c,v 1.1 2024/02/03 20:10:11 rillig Exp $ */ +# 3 "msg_356.c" + +// Test for message 356: short octal escape '%.*s' followed by digit '%c' [356] + +/* lint1-extra-flags: -X 351 */ + +// When counting backwards in octal, the number before \040 is not \039 but +// \037. This mistake sometimes happens while encoding the bit numbers for +// snprintb(3) format directives. + +char snprintb_fmt[] = "\020" + "\0040bit32" // 3-digit octal escapes are fine + "\0039bit31" + "\0038bit30" + + "\040bit32" + /* expect+1: warning: short octal escape '\03' followed by digit '9' [356] */ + "\039bit31" + /* expect+1: warning: short octal escape '\03' followed by digit '8' [356] */ + "\038bit30" + + "\40bit32" + /* expect+1: warning: short octal escape '\3' followed by digit '9' [356] */ + "\39bit31" + /* expect+1: warning: short octal escape '\3' followed by digit '8' [356] */ + "\38bit30" + "\37bit29" +; + +char ok[] = "" + "\3\70" // short octal followed by escaped '8' + "\3\x38" // short octal followed by escaped '8' + "\3" "8" // short octal and '8' are separated +;