diff --git a/lib/checkbufferoverrun.cpp b/lib/checkbufferoverrun.cpp index 7a1d226af..3c7380f29 100644 --- a/lib/checkbufferoverrun.cpp +++ b/lib/checkbufferoverrun.cpp @@ -1089,7 +1089,7 @@ void CheckBufferOverrun::checkGlobalAndLocalVariable() if (!it->tokvalue) continue; const Variable *var = it->tokvalue->variable(); - if (var && var->isArray() && var->dimensions().size() == 1U && value->intvalue > var->dimension(0)) { + if (var && var->isArray() && var->dimensions().size() == 1U && var->dimensionKnown(0) && value->intvalue > var->dimension(0)) { std::list callstack; callstack.push_back(it->tokvalue); callstack.push_back(tok); diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp index 86fc4e937..7bff56ca0 100644 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -2065,6 +2065,13 @@ private: " p[20] = 0;\n" "}"); ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:4]: (error) Array 'a[10]' accessed at index 20, which is out of bounds.\n", errout.str()); + + check("void f() {\n" + " int a[X];\n" + " int *p = a;\n" + " p[20] = 0;\n" + "}"); + ASSERT_EQUALS("", errout.str()); } void array_index_function_parameter() {