Module Name: src Committed By: rillig Date: Tue Nov 5 06:23:04 UTC 2024
Modified Files: src/tests/usr.bin/xlint/lint1: msg_357.c msg_358.c msg_359.c msg_360.c msg_361.c msg_363.c Log Message: tests/lint: extend snprintb tests and improve their documentation To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/tests/usr.bin/xlint/lint1/msg_357.c \ src/tests/usr.bin/xlint/lint1/msg_359.c cvs rdiff -u -r1.3 -r1.4 src/tests/usr.bin/xlint/lint1/msg_358.c \ src/tests/usr.bin/xlint/lint1/msg_360.c \ src/tests/usr.bin/xlint/lint1/msg_361.c cvs rdiff -u -r1.6 -r1.7 src/tests/usr.bin/xlint/lint1/msg_363.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_357.c diff -u src/tests/usr.bin/xlint/lint1/msg_357.c:1.2 src/tests/usr.bin/xlint/lint1/msg_357.c:1.3 --- src/tests/usr.bin/xlint/lint1/msg_357.c:1.2 Sat Aug 31 06:57:31 2024 +++ src/tests/usr.bin/xlint/lint1/msg_357.c Tue Nov 5 06:23:04 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: msg_357.c,v 1.2 2024/08/31 06:57:31 rillig Exp $ */ +/* $NetBSD: msg_357.c,v 1.3 2024/11/05 06:23:04 rillig Exp $ */ # 3 "msg_357.c" // Test for message: hex escape '%.*s' mixes uppercase and lowercase digits [357] @@ -6,9 +6,9 @@ /* * In the format argument of the snprintb and snprintb_m functions, a bit * position or field width is written as an octal or hexadecimal escape - * sequence. If the description that follows starts with hex digits (A-Fa-f), - * these digits are still part of the escape sequence instead of the - * description. + * sequence. If the description that follows a hexadecimal escape sequence + * starts with hexadecimal digits (A-Fa-f), these digits are still part of the + * escape sequence instead of the description. * * Since the escape sequences are typically written in lowercase and the * descriptions are typically written in uppercase, a mixture of both cases @@ -41,6 +41,13 @@ examples(unsigned u32, uint64_t u64) "\020\x1FIELD", u32); + // If the input value is restricted further, the unintended hexadecimal + // escape sequence is detected, although with a less obvious message. + /* expect+3: warning: conversion '\x1FIELD' is unreachable by input value [378] */ + snprintb(buf, sizeof(buf), + "\020\x1FIELD", + u32 & 0xffff); + /* expect+5: warning: hex escape '\x0aB' mixes uppercase and lowercase digits [357] */ /* expect+4: warning: hex escape '\x0aB' has more than 2 digits [358] */ /* expect+3: warning: bit position '\x0aB' (171) in 'b\x0aBIT\0' out of range 0..63 [371] */ Index: src/tests/usr.bin/xlint/lint1/msg_359.c diff -u src/tests/usr.bin/xlint/lint1/msg_359.c:1.2 src/tests/usr.bin/xlint/lint1/msg_359.c:1.3 --- src/tests/usr.bin/xlint/lint1/msg_359.c:1.2 Sat Aug 31 06:57:31 2024 +++ src/tests/usr.bin/xlint/lint1/msg_359.c Tue Nov 5 06:23:04 2024 @@ -1,11 +1,13 @@ -/* $NetBSD: msg_359.c,v 1.2 2024/08/31 06:57:31 rillig Exp $ */ +/* $NetBSD: msg_359.c,v 1.3 2024/11/05 06:23:04 rillig Exp $ */ # 3 "msg_359.c" // Test for message: missing new-style '\177' or old-style number base [359] /* * The first or second character of the snprintb format specifies the number - * base. It must be given in binary. + * base. It must be an octal or hexadecimal escape sequence, as the characters + * 2, 10 and 16 are not printable, and writing '\n' instead of '\x0a' would be + * misleading. */ /* lint1-extra-flags: -X 351 */ Index: src/tests/usr.bin/xlint/lint1/msg_358.c diff -u src/tests/usr.bin/xlint/lint1/msg_358.c:1.3 src/tests/usr.bin/xlint/lint1/msg_358.c:1.4 --- src/tests/usr.bin/xlint/lint1/msg_358.c:1.3 Sat Aug 31 06:57:31 2024 +++ src/tests/usr.bin/xlint/lint1/msg_358.c Tue Nov 5 06:23:04 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: msg_358.c,v 1.3 2024/08/31 06:57:31 rillig Exp $ */ +/* $NetBSD: msg_358.c,v 1.4 2024/11/05 06:23:04 rillig Exp $ */ # 3 "msg_358.c" // Test for message: hex escape '%.*s' has more than 2 digits [358] @@ -6,9 +6,13 @@ /* * In the format argument of the snprintb and snprintb_m functions, a bit * position or field width is written as an octal or hexadecimal escape - * sequence. If the description that follows starts with hex digits (A-Fa-f), - * these digits are still part of the escape sequence instead of the - * description. + * sequence. If the description that follows a hexadecimal escape sequence + * starts with hexadecimal digits (A-Fa-f), these digits are still part of the + * escape sequence instead of the description. + * + * All platforms supported by lint have 8-bit char, so using more than the + * maximum necessary 2 hexadecimal digits in an escape sequence is suspicious + * of being unintended. */ /* lint1-extra-flags: -X 351 */ Index: src/tests/usr.bin/xlint/lint1/msg_360.c diff -u src/tests/usr.bin/xlint/lint1/msg_360.c:1.3 src/tests/usr.bin/xlint/lint1/msg_360.c:1.4 --- src/tests/usr.bin/xlint/lint1/msg_360.c:1.3 Sat Aug 31 06:57:31 2024 +++ src/tests/usr.bin/xlint/lint1/msg_360.c Tue Nov 5 06:23:04 2024 @@ -1,12 +1,12 @@ -/* $NetBSD: msg_360.c,v 1.3 2024/08/31 06:57:31 rillig Exp $ */ +/* $NetBSD: msg_360.c,v 1.4 2024/11/05 06:23:04 rillig Exp $ */ # 3 "msg_360.c" // Test for message: missing new-style number base after '\177' [360] /* * The new-style format requires the number base as the second character. - * This check is merely a byproduct of the implementation, it does not provide - * much value on its own. + * This check is merely a byproduct of the implementation, it provides little + * value of its own. */ /* lint1-extra-flags: -X 351 */ Index: src/tests/usr.bin/xlint/lint1/msg_361.c diff -u src/tests/usr.bin/xlint/lint1/msg_361.c:1.3 src/tests/usr.bin/xlint/lint1/msg_361.c:1.4 --- src/tests/usr.bin/xlint/lint1/msg_361.c:1.3 Sat Aug 31 06:57:31 2024 +++ src/tests/usr.bin/xlint/lint1/msg_361.c Tue Nov 5 06:23:04 2024 @@ -1,11 +1,11 @@ -/* $NetBSD: msg_361.c,v 1.3 2024/08/31 06:57:31 rillig Exp $ */ +/* $NetBSD: msg_361.c,v 1.4 2024/11/05 06:23:04 rillig Exp $ */ # 3 "msg_361.c" // Test for message: number base '%.*s' is %ju, must be 8, 10 or 16 [361] /* * The first or second character of the snprintb format specifies the number - * base. It must be given in binary. + * base. It must be given as an octal or hexadecimal escape sequence. */ /* lint1-extra-flags: -X 351 */ Index: src/tests/usr.bin/xlint/lint1/msg_363.c diff -u src/tests/usr.bin/xlint/lint1/msg_363.c:1.6 src/tests/usr.bin/xlint/lint1/msg_363.c:1.7 --- src/tests/usr.bin/xlint/lint1/msg_363.c:1.6 Sat Aug 31 06:57:31 2024 +++ src/tests/usr.bin/xlint/lint1/msg_363.c Tue Nov 5 06:23:04 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: msg_363.c,v 1.6 2024/08/31 06:57:31 rillig Exp $ */ +/* $NetBSD: msg_363.c,v 1.7 2024/11/05 06:23:04 rillig Exp $ */ # 3 "msg_363.c" // Test for message: escaped character '%.*s' in description of conversion '%.*s' [363] @@ -30,6 +30,18 @@ old_style_description(unsigned u32) "\001non\tprint\nable\377", u32); + // In the new format, the description can technically contain + // arbitrary characters, but having non-printable characters would + // produce confusing output, so any escaped characters are suspicious + // of being unintended. + /* expect+6: warning: escaped character '\t' in description of conversion 'b\000non\t' [363] */ + /* expect+5: warning: escaped character '\n' in description of conversion 'b\000non\tprint\n' [363] */ + /* expect+4: warning: escaped character '\377' in description of conversion 'b\000non\tprint\nable\377' [363] */ + snprintb(buf, sizeof(buf), + "\177\020" + "b\000non\tprint\nable\377\0", + u32); + /* 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] */