From 4881caf9e662841fc79ed75b9a100f0fbdcaeb4f Mon Sep 17 00:00:00 2001 From: Greg Hewgill Date: Tue, 8 Feb 2011 19:26:54 +1300 Subject: [PATCH 1/2] test for conditional operator and array index bounds --- test/testbufferoverrun.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp index 4966231ba36..507f0dbe1a4 100644 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -1366,6 +1366,15 @@ class TestBufferOverrun : public TestFixture " }\n" "}\n"); ASSERT_EQUALS("", errout.str()); + + // check for conditional operator + check("void f() {\n" + " int a[10];\n" + " for (int i = 0; i < 10; i++) {\n" + " i == 0 ? 0 : a[i-1];\n" + " }\n" + "}"); + ASSERT_EQUALS("", errout.str()); } void array_index_for_neq() From 060b0ac65f5460fce25c2755f4f8bda13ddc6fe5 Mon Sep 17 00:00:00 2001 From: Greg Hewgill Date: Tue, 8 Feb 2011 20:32:14 +1300 Subject: [PATCH 2/2] false positive on array index when using a specific printf format --- test/testbufferoverrun.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp index 507f0dbe1a4..0d6c68f153e 100644 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -116,6 +116,7 @@ class TestBufferOverrun : public TestFixture TEST_CASE(array_index_for_break); // FP: for,break TEST_CASE(array_index_for); // FN: for,if TEST_CASE(array_index_for_neq); // #2211: Using != in condition + TEST_CASE(array_index_for_printf); TEST_CASE(buffer_overrun_1); TEST_CASE(buffer_overrun_2); @@ -1389,6 +1390,16 @@ class TestBufferOverrun : public TestFixture ASSERT_EQUALS("[test.cpp:4]: (error) Buffer access out-of-bounds: a\n", errout.str()); } + void array_index_for_printf() + { + check("typedef char Str[10];\n" + "void f() {\n" + " Str s;\n" + " printf(\"%.*s %.*s\\n\", sizeof(Str), s, sizeof(Str), s);\n" + "}"); + ASSERT_EQUALS("", errout.str()); + } + void buffer_overrun_1() { check("void f()\n"