From 0b19a52e905b752f030f36fb241102f16df22995 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Wed, 29 Jul 2026 09:08:02 +0200 Subject: [PATCH 1/3] Update checkbufferoverrun.cpp --- lib/checkbufferoverrun.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/checkbufferoverrun.cpp b/lib/checkbufferoverrun.cpp index 46d8e1c7c6c..232451ca72b 100644 --- a/lib/checkbufferoverrun.cpp +++ b/lib/checkbufferoverrun.cpp @@ -68,8 +68,9 @@ static const ValueFlow::Value *getBufferSizeValue(const Token *tok) auto it = std::find_if(tokenValues.cbegin(), tokenValues.cend(), std::mem_fn(&ValueFlow::Value::isBufferSizeValue)); if (it != tokenValues.cend()) return &*it; - it = std::find_if(tokenValues.cbegin(), tokenValues.cend(), std::mem_fn(&ValueFlow::Value::isContainerSizeValue)); - return it == tokenValues.cend() ? nullptr : &*it; + it = std::find_if(tokenValues.cbegin(), tokenValues.cend(), [](const ValueFlow::Value& v) { + return v.isContainerSizeValue() && v.isKnown(); + }); } static const Token* getRealBufferTok(const Token* tok) { From 88a9426aa6aef7193cffb2636b016e67fd0bfa80 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Wed, 29 Jul 2026 09:09:41 +0200 Subject: [PATCH 2/3] Update testbufferoverrun.cpp --- test/testbufferoverrun.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp index 37ab7083902..1f69adb50c4 100644 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -3564,6 +3564,14 @@ class TestBufferOverrun : public TestFixture { " memset(&a[i], 0, sizeof(a));\n" "}\n"); ASSERT_EQUALS("[test.cpp:4:16]: (error) Buffer is accessed out of bounds: &a[i] [bufferAccessOutOfBounds]\n", errout_str()); + + check("void f(const std::vector& s) {\n" // #14948 + " if (s.size() < 4)\n" + " return;\n" + " uint32_t u = 0;\n" + " std::memcpy(&u, &s[0], sizeof(u));\n" + "}\n"); + ASSERT_EQUALS("", errout_str()); } void buffer_overrun_errorpath() { From 31b88ba2d9c1ec6e0d5ee65458f24ed5fe696f69 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Wed, 29 Jul 2026 10:27:02 +0200 Subject: [PATCH 3/3] Update checkbufferoverrun.cpp --- lib/checkbufferoverrun.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/checkbufferoverrun.cpp b/lib/checkbufferoverrun.cpp index 232451ca72b..87729ebbb79 100644 --- a/lib/checkbufferoverrun.cpp +++ b/lib/checkbufferoverrun.cpp @@ -71,6 +71,7 @@ static const ValueFlow::Value *getBufferSizeValue(const Token *tok) it = std::find_if(tokenValues.cbegin(), tokenValues.cend(), [](const ValueFlow::Value& v) { return v.isContainerSizeValue() && v.isKnown(); }); + return it == tokenValues.cend() ? nullptr : &*it; } static const Token* getRealBufferTok(const Token* tok) {