From 35fa525f4ee43b92082fdb38013eb7eb1edf23a9 Mon Sep 17 00:00:00 2001 From: chrchr-github Date: Sun, 21 Jun 2026 14:27:08 +0200 Subject: [PATCH 1/2] Fix #14866 FP bufferAccessOutOfBounds with vector and gethostname() --- lib/checkbufferoverrun.cpp | 2 +- test/testbufferoverrun.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/checkbufferoverrun.cpp b/lib/checkbufferoverrun.cpp index 8be9b508849..5b3e6b294b4 100644 --- a/lib/checkbufferoverrun.cpp +++ b/lib/checkbufferoverrun.cpp @@ -574,7 +574,7 @@ ValueFlow::Value CheckBufferOverrunImpl::getBufferSize(const Token *bufTok) cons return *value; } - if (!var || var->isPointer()) + if (!var || var->isPointer() || (astIsContainer(bufTok) && var->getTypeName() != "std::array")) return ValueFlow::Value(-1); const MathLib::bigint dim = std::accumulate(var->dimensions().cbegin(), var->dimensions().cend(), MathLib::bigint(1), [](MathLib::bigint i1, const Dimension &dim) { diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp index 1a03ca336f8..2d4c73e6474 100644 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -3539,6 +3539,12 @@ class TestBufferOverrun : public TestFixture { "[test.cpp:7:12]: (error) Buffer is accessed out of bounds: &a[0][0] [bufferAccessOutOfBounds]\n", "", errout_str()); + + check("void f() {\n" + " std::vector buf(25);\n" + " std::memset(&buf[0], 0, 25);\n" + "}\n"); + ASSERT_EQUALS("", errout_str()); } void buffer_overrun_errorpath() { From 34c207c612c59a691803466275aecb6aa7b8d5a4 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Mon, 22 Jun 2026 08:39:31 +0200 Subject: [PATCH 2/2] Add comment [skip ci] --- test/testbufferoverrun.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp index 2d4c73e6474..e1da77ccbfb 100644 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -3540,7 +3540,7 @@ class TestBufferOverrun : public TestFixture { "", errout_str()); - check("void f() {\n" + check("void f() {\n" // #14866 " std::vector buf(25);\n" " std::memset(&buf[0], 0, 25);\n" "}\n");