1*465ab238Srillig /* $NetBSD: msg_366.c,v 1.5 2024/08/31 06:57:31 rillig Exp $ */ 238c0bdf2Srillig # 3 "msg_366.c" 338c0bdf2Srillig 438c0bdf2Srillig // Test for message: missing '\0' at the end of '%.*s' [366] 538c0bdf2Srillig 638c0bdf2Srillig /* 764230f32Srillig * In the new-style format, each conversion ends with a '\0'. If that's not 838c0bdf2Srillig * the case, snprintb will read beyond the end of the format argument, looking 938c0bdf2Srillig * for the terminating '\0'. In the most common case where the format comes 1064230f32Srillig * from a string literal, the '\0' from the conversion needs to be spelled 1164230f32Srillig * out, while the '\0' that terminates the sequence of conversions is provided 1264230f32Srillig * by the C compiler. 1338c0bdf2Srillig */ 1438c0bdf2Srillig 1538c0bdf2Srillig /* lint1-extra-flags: -X 351 */ 1638c0bdf2Srillig 1738c0bdf2Srillig typedef typeof(sizeof(0)) size_t; 1838c0bdf2Srillig typedef unsigned long long uint64_t; 1938c0bdf2Srillig 2038c0bdf2Srillig int snprintb(char *, size_t, const char *, uint64_t); 2138c0bdf2Srillig 2238c0bdf2Srillig void 2338c0bdf2Srillig example(unsigned u32) 2438c0bdf2Srillig { 2538c0bdf2Srillig char buf[64]; 2638c0bdf2Srillig 27a8d07ea3Srillig /* expect+4: warning: redundant '\0' at the end of the format [377] */ 2838c0bdf2Srillig snprintb(buf, sizeof(buf), 2938c0bdf2Srillig "\177\020" 3038c0bdf2Srillig "\0", 3138c0bdf2Srillig u32); 3238c0bdf2Srillig 33a8d07ea3Srillig /* expect+5: warning: empty description in 'b\007' [367] */ 3438c0bdf2Srillig /* expect+4: warning: missing '\0' at the end of 'b\007' [366] */ 3538c0bdf2Srillig snprintb(buf, sizeof(buf), 3638c0bdf2Srillig "\177\020" 3738c0bdf2Srillig "b\007", 3838c0bdf2Srillig u32); 3938c0bdf2Srillig 40a8d07ea3Srillig /* expect+5: warning: empty description in 'f\007\000' [367] */ 4138c0bdf2Srillig /* expect+4: warning: missing '\0' at the end of 'f\007\000' [366] */ 4238c0bdf2Srillig snprintb(buf, sizeof(buf), 4338c0bdf2Srillig "\177\020" 4438c0bdf2Srillig "f\007\000", 4538c0bdf2Srillig u32); 4638c0bdf2Srillig 4738c0bdf2Srillig /* expect+4: warning: missing '\0' at the end of 'F\007\000' [366] */ 4838c0bdf2Srillig snprintb(buf, sizeof(buf), 4938c0bdf2Srillig "\177\020" 5038c0bdf2Srillig "F\007\000", 5138c0bdf2Srillig u32); 5238c0bdf2Srillig 5338c0bdf2Srillig /* expect+4: warning: missing '\0' at the end of '=\007value' [366] */ 5438c0bdf2Srillig snprintb(buf, sizeof(buf), 5538c0bdf2Srillig "\177\020" 5638c0bdf2Srillig "=\007value", 5738c0bdf2Srillig u32); 5838c0bdf2Srillig 5938c0bdf2Srillig /* expect+4: warning: missing '\0' at the end of ':\007value' [366] */ 6038c0bdf2Srillig snprintb(buf, sizeof(buf), 6138c0bdf2Srillig "\177\020" 6238c0bdf2Srillig ":\007value", 6338c0bdf2Srillig u32); 6438c0bdf2Srillig 6538c0bdf2Srillig /* expect+4: warning: missing '\0' at the end of '*default' [366] */ 6638c0bdf2Srillig snprintb(buf, sizeof(buf), 6738c0bdf2Srillig "\177\020" 6838c0bdf2Srillig "*default", 6938c0bdf2Srillig u32); 7038c0bdf2Srillig } 71