@@ -310,39 +310,56 @@ namespace custom_sprintf_impl {
310
310
}
311
311
312
312
void test6 (unsigned unsigned_value, int value) {
313
- char buffer[ 2 ];
313
+ char buffer2[ 2 ], buffer3[ 3 ], buffer4[ 4 ], buffer5[ 5 ];
314
314
315
- sprintf (buffer , " %u" , unsigned_value); // BAD: buffer overflow
316
- sprintf (buffer , " %d" , unsigned_value); // BAD: buffer overflow
317
- if (unsigned_value < 10 ) {
318
- sprintf (buffer , " %u" , unsigned_value); // GOOD
315
+ sprintf (buffer4 , " %u" , unsigned_value); // BAD: buffer overflow
316
+ sprintf (buffer4 , " %d" , unsigned_value); // BAD: buffer overflow
317
+ if (unsigned_value < 1000 ) {
318
+ sprintf (buffer4 , " %u" , unsigned_value); // GOOD
319
319
}
320
320
321
- sprintf (buffer , " %u" , -10 ); // BAD: buffer overflow
321
+ sprintf (buffer4 , " %u" , -100 ); // BAD: buffer overflow
322
322
323
- if (unsigned_value == (unsigned )-10 ) {
324
- sprintf (buffer , " %u" , unsigned_value); // BAD: buffer overflow
323
+ if (unsigned_value == (unsigned )-100 ) {
324
+ sprintf (buffer4 , " %u" , unsigned_value); // BAD: buffer overflow
325
325
}
326
326
327
- sprintf (buffer , " %d" , value); // BAD: buffer overflow
328
- if (value < 10 ) {
329
- sprintf (buffer , " %d" , value); // BAD: buffer overflow
327
+ sprintf (buffer4 , " %d" , value); // BAD: buffer overflow
328
+ if (value < 1000 ) {
329
+ sprintf (buffer4 , " %d" , value); // BAD: buffer overflow
330
330
331
- if (value > 0 ) {
332
- sprintf (buffer , " %d" , value); // GOOD
331
+ if (value > - 100 ) {
332
+ sprintf (buffer4 , " %d" , value); // GOOD
333
333
}
334
334
}
335
335
336
- sprintf (buffer , " %u" , 0 ); // GOOD
337
- sprintf (buffer , " %d" , 0 ); // GOOD
338
- sprintf (buffer , " %u" , 5 ); // GOOD
339
- sprintf (buffer , " %d" , 5 ); // GOOD
336
+ sprintf (buffer2 , " %u" , 0 ); // GOOD
337
+ sprintf (buffer2 , " %d" , 0 ); // GOOD
338
+ sprintf (buffer2 , " %u" , 5 ); // GOOD
339
+ sprintf (buffer2 , " %d" , 5 ); // GOOD
340
340
341
- sprintf (buffer , " %d" , -1 ); // BAD
342
- sprintf (buffer , " %d" , 9 ); // GOOD
343
- sprintf (buffer , " %d" , 10 ); // BAD
341
+ sprintf (buffer2 , " %d" , -1 ); // BAD
342
+ sprintf (buffer2 , " %d" , 9 ); // GOOD
343
+ sprintf (buffer2 , " %d" , 10 ); // BAD
344
344
345
- sprintf (buffer, " %u" , -1 ); // BAD
346
- sprintf (buffer, " %u" , 9 ); // GOOD
347
- sprintf (buffer, " %u" , 10 ); // BAD
345
+ sprintf (buffer2, " %u" , -1 ); // BAD
346
+ sprintf (buffer2, " %u" , 9 ); // GOOD
347
+ sprintf (buffer2, " %u" , 10 ); // BAD
348
+
349
+ unsigned char unsigned_char = unsigned_value;
350
+ sprintf (buffer3, " %u" , (unsigned )unsigned_char); // BAD
351
+ sprintf (buffer4, " %u" , (unsigned )unsigned_char); // GOOD: 0..255 fits
352
+
353
+ unsigned small = unsigned_value >> (sizeof (unsigned_value) * 8 - 9 ); // in range 0..511
354
+ sprintf (buffer3, " %u" , small); // BAD
355
+ sprintf (buffer4, " %u" , small); // GOOD
356
+
357
+ small = unsigned_value & ((1u << 9 ) - 1 ); // in range 0..511
358
+ sprintf (buffer3, " %u" , small); // BAD
359
+ sprintf (buffer4, " %u" , small); // GOOD: 0..511 fits
360
+
361
+ char c = value;
362
+
363
+ sprintf (buffer4, " %d" , (int )c); // BAD: e.g. -127 does not fit
364
+ sprintf (buffer5, " %d" , (int )c); // GOOD: -127..128 fits
348
365
}
0 commit comments