@@ -4620,6 +4620,41 @@ class TestBufferOverrun : public TestFixture {
46204620 " mysprintf(a, \" abcd\" );\n "
46214621 " }" , settings);
46224622 ASSERT_EQUALS (" " , errout_str ());
4623+
4624+ check (" void f() {\n " // #901
4625+ " const char b[] = \" b\" ;\n "
4626+ " char a[1];\n "
4627+ " sprintf(a, \" %s\" , b);\n "
4628+ " }\n "
4629+ " void g() {\n "
4630+ " const char* b = \" b\" ;\n "
4631+ " char a[1];\n "
4632+ " sprintf(a, \" %s\" , b);\n "
4633+ " }\n "
4634+ " void h() {\n "
4635+ " const std::string b = \" b\" ;\n "
4636+ " char a[1];\n "
4637+ " sprintf(a, \" %s\" , b.c_str());\n "
4638+ " }\n "
4639+ " void i() {\n "
4640+ " const char b[] = \" b\" ;\n "
4641+ " char a[2];\n "
4642+ " sprintf(a, \" %s\" , b);\n "
4643+ " }\n "
4644+ " void j() {\n "
4645+ " const char* b = \" b\" ;\n "
4646+ " char a[2];\n "
4647+ " sprintf(a, \" %s\" , b);\n "
4648+ " }\n "
4649+ " void k() {\n "
4650+ " const std::string b = \" b\" ;\n "
4651+ " char a[2];\n "
4652+ " sprintf(a, \" %s\" , b.c_str());\n "
4653+ " }\n " , settings0);
4654+ ASSERT_EQUALS (" [test.cpp:4:13]: (error) Buffer is accessed out of bounds: a [bufferAccessOutOfBounds]\n "
4655+ " [test.cpp:9:13]: (error) Buffer is accessed out of bounds: a [bufferAccessOutOfBounds]\n "
4656+ " [test.cpp:14:13]: (error) Buffer is accessed out of bounds: a [bufferAccessOutOfBounds]\n " ,
4657+ errout_str ());
46234658 }
46244659
46254660 void minsize_mul () {
0 commit comments