From b37c2209806eaa418fa0b0757497240277435641 Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Mon, 29 Jun 2026 15:00:59 +0200 Subject: [PATCH 1/2] Update checkbufferoverrun.cpp --- lib/checkbufferoverrun.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/checkbufferoverrun.cpp b/lib/checkbufferoverrun.cpp index a98ba73429c..496ca6905a1 100644 --- a/lib/checkbufferoverrun.cpp +++ b/lib/checkbufferoverrun.cpp @@ -1086,9 +1086,11 @@ void CheckBufferOverrunImpl::objectIndex() std::vector values = ValueFlow::getLifetimeObjValues(obj, false, -1); for (const ValueFlow::Value& v:values) { - if (v.lifetimeKind != ValueFlow::Value::LifetimeKind::Address) + if (v.lifetimeKind != ValueFlow::Value::LifetimeKind::Address && v.lifetimeKind != ValueFlow::Value::LifetimeKind::Object) continue; - const Variable *var = v.tokvalue->variable(); + const Token* varTok = nextAfterAstRightmostLeaf(v.tokvalue->astParent()); + varTok = varTok ? varTok->previous() : nullptr; + const Variable *var = varTok ? varTok->variable() : nullptr; if (!var) continue; if (var->isReference()) From e38217c6e6037c5d2bfbd091a3a35aa62d5cdf4f Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Mon, 29 Jun 2026 15:01:48 +0200 Subject: [PATCH 2/2] Update testbufferoverrun.cpp --- test/testbufferoverrun.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp index e1da77ccbfb..e51a1708389 100644 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -5857,7 +5857,9 @@ class TestBufferOverrun : public TestFixture { " (void)y[1];\n" " (void)y[2];\n" "}\n"); - TODO_ASSERT_EQUALS("error", "", errout_str()); + ASSERT_EQUALS("[test.cpp:7:20] -> [test.cpp:9:12]: (error) The address of variable 's.a' is accessed at non-zero index. [objectIndex]\n" + "[test.cpp:7:20] -> [test.cpp:10:12]: (error) The address of variable 's.a' is accessed at non-zero index. [objectIndex]\n", + errout_str()); } void checkPipeParameterSize() { // #3521