Fixed #948 (array index out of bound not detected 'a[i-1] = 0')

This commit is contained in:
Daniel Marjamäki 2010-04-25 07:34:50 +02:00
parent e068979d62
commit 1a34e7daf6
2 changed files with 16 additions and 0 deletions

View File

@ -460,6 +460,10 @@ void CheckBufferOverrun::parse_for_body(const Token *tok2, const ArrayInfo &arra
}
//printf("min_index = %d, max_index = %d, size = %d\n", min_index, max_index, size);
if (min_index < 0 || max_index < 0)
{
arrayIndexOutOfBounds(tok2, (int)arrayInfo.num[0], std::min(min_index, max_index));
}
if (min_index >= (int)arrayInfo.num[0] || max_index >= (int)arrayInfo.num[0])
{
arrayIndexOutOfBounds(tok2, (int)arrayInfo.num[0], std::max(min_index, max_index));

View File

@ -98,6 +98,7 @@ private:
TEST_CASE(array_index_24); // ticket #1492 and #1539
TEST_CASE(array_index_25); // ticket #1536
TEST_CASE(array_index_26);
TEST_CASE(array_index_27);
TEST_CASE(array_index_multidim);
TEST_CASE(array_index_switch_in_for);
TEST_CASE(array_index_calculation);
@ -902,6 +903,17 @@ private:
ASSERT_EQUALS("", errout.str());
}
void array_index_27()
{
check("void f()\n"
"{\n"
" int a[10];\n"
" for (int i = 0; i < 10; i++)\n"
" a[i-1] = a[i];\n"
"}\n");
ASSERT_EQUALS("[test.cpp:5]: (error) Array 'a[10]' index -1 out of bounds\n", errout.str());
}
void array_index_multidim()
{
check("void f()\n"