@@ -307,4 +307,34 @@ namespace custom_sprintf_impl {
307307 char buffer8[8 ];
308308 sprintf (buffer8, " 12345678" ); // BAD: potential buffer overflow
309309 }
310+ }
311+
312+ void test6 (unsigned unsigned_value, int value) {
313+ char buffer[2 ];
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 [FALSE POSITIVE]
319+ }
320+
321+ sprintf (buffer, " %u" , -10 ); // BAD: buffer overflow
322+
323+ if (unsigned_value == (unsigned )-10 ) {
324+ sprintf (buffer, " %u" , unsigned_value); // BAD: buffer overflow
325+ }
326+
327+ sprintf (buffer, " %d" , value); // BAD: buffer overflow
328+ if (value < 10 ) {
329+ sprintf (buffer, " %d" , value); // BAD: buffer overflow
330+
331+ if (value > 0 ) {
332+ sprintf (buffer, " %d" , value); // GOOD [FALSE POSITIVE]
333+ }
334+ }
335+
336+ sprintf (buffer, " %u" , 0 ); // GOOD [FALSE POSITIVE]
337+ sprintf (buffer, " %d" , 0 ); // GOOD [FALSE POSITIVE]
338+ sprintf (buffer, " %u" , 5 ); // GOOD [FALSE POSITIVE]
339+ sprintf (buffer, " %d" , 5 ); // GOOD [FALSE POSITIVE]
310340}
0 commit comments