@@ -229,6 +229,7 @@ class TestBufferOverrun : public TestFixture {
229229 TEST_CASE (buffer_overrun_36);
230230 TEST_CASE (buffer_overrun_37);
231231 TEST_CASE (buffer_overrun_38);
232+ TEST_CASE (buffer_overrun_39);
232233 TEST_CASE (buffer_overrun_errorpath);
233234 TEST_CASE (buffer_overrun_bailoutIfSwitch); // ticket #2378 : bailoutIfSwitch
234235 TEST_CASE (buffer_overrun_function_array_argument);
@@ -3638,6 +3639,44 @@ class TestBufferOverrun : public TestFixture {
36383639 ASSERT_EQUALS (" " , errout_str ());
36393640 }
36403641
3642+ void buffer_overrun_39 () { // #11765
3643+ check (" void f() {\n "
3644+ " char buf[10];\n "
3645+ " memcpy(buf, \" abc\" , 4);\n "
3646+ " }\n " );
3647+ ASSERT_EQUALS (" " , errout_str ());
3648+
3649+ check (" void f() {\n "
3650+ " char buf[128];\n "
3651+ " memcpy(buf, \" abc\" , 5);\n "
3652+ " }\n " );
3653+ ASSERT_EQUALS (" [test.cpp:3:17]: (warning) Buffer is accessed out of bounds: \" abc\" [bufferAccessOutOfBounds]\n " ,
3654+ errout_str ());
3655+
3656+ check (" void f() {\n "
3657+ " char buf[128];\n "
3658+ " memcpy(buf, L\" abc\" , 4 * sizeof(wchar_t));\n "
3659+ " }\n " );
3660+ ASSERT_EQUALS (" " , errout_str ());
3661+
3662+ check (" void f() {\n "
3663+ " char buf[128];\n "
3664+ " memcpy(buf, L\" abc\" , 4 * sizeof(wchar_t) + 1);\n "
3665+ " }\n " );
3666+ ASSERT_EQUALS (" [test.cpp:3:17]: (warning) Buffer is accessed out of bounds: L\" abc\" [bufferAccessOutOfBounds]\n " ,
3667+ errout_str ());
3668+
3669+ check (" int f(char* s) {\n "
3670+ " return memcmp(s, \"\\ 0\\ 0\\ 0\" , 3);\n "
3671+ " }\n " );
3672+ ASSERT_EQUALS (" " , errout_str ());
3673+
3674+ check (" int f(const char16_t* buf) {\n "
3675+ " return memcmp(buf, u\" abc\" , 4 * sizeof(char16_t));\n "
3676+ " }\n " );
3677+ ASSERT_EQUALS (" " , errout_str ());
3678+ }
3679+
36413680 void buffer_overrun_errorpath () {
36423681 setMultiline ();
36433682 Settings s = settings0;
@@ -4618,9 +4657,8 @@ class TestBufferOverrun : public TestFixture {
46184657 check (" void f() {\n "
46194658 " mymemset(\" abc\" , 0, 20);\n "
46204659 " }\n " , settings);
4621- TODO_ASSERT_EQUALS (" [test.cpp:2]: (error) Buffer is accessed out of bounds.\n " ,
4622- " " ,
4623- errout_str ());
4660+ ASSERT_EQUALS (" [test.cpp:2:12]: (warning) Buffer is accessed out of bounds: \" abc\" [bufferAccessOutOfBounds]\n " ,
4661+ errout_str ());
46244662
46254663 check (" void f() {\n "
46264664 " mymemset(temp, \" abc\" , 4);\n "
0 commit comments