diff --git a/lib/checkbufferoverrun.cpp b/lib/checkbufferoverrun.cpp index f0f3cc40c..14f7efab9 100644 --- a/lib/checkbufferoverrun.cpp +++ b/lib/checkbufferoverrun.cpp @@ -205,7 +205,7 @@ static bool getDimensionsEtc(const Token * const arrayToken, const Settings *set dim.num = Token::getStrArraySize(stringLiteral); dim.known = array->hasKnownValue(); dimensions->emplace_back(dim); - } else if (array->valueType() && array->valueType()->pointer >= 1 && array->valueType()->isIntegral()) { + } else if (array->valueType() && array->valueType()->pointer >= 1 && (array->valueType()->isIntegral() || array->valueType()->isFloat())) { const ValueFlow::Value *value = getBufferSizeValue(array); if (!value) return false; diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp index 39a5124a6..c2eeb93f1 100644 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -1247,6 +1247,14 @@ private: "}"); ASSERT_EQUALS("[test.cpp:4]: (error) Array 'p[10]' accessed at index 10, which is out of bounds.\n", errout.str()); + check("void f()\n" + "{\n" + " float *p; p = (float *)malloc(10 * sizeof(float));\n" + " p[10] = 7;\n" + " free(p);\n" + "}"); + ASSERT_EQUALS("[test.cpp:4]: (error) Array 'p[10]' accessed at index 10, which is out of bounds.\n", errout.str()); + check("void f()\n" "{\n" " char *p; p = (char *)malloc(10);\n"