From 5cae07576e6e37517d129bd7540b13c5ec390a56 Mon Sep 17 00:00:00 2001 From: chrchr Date: Thu, 8 Dec 2022 12:24:58 +0100 Subject: [PATCH] Fix #11423 Crash in valueFlowForwardConst() --- lib/valueflow.cpp | 2 +- test/testvalueflow.cpp | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 85f90085416..ba0850f9bdc 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -5329,7 +5329,7 @@ static void valueFlowForwardConst(Token* start, const Settings* const settings, int /*unused*/ = 0) { - for (Token* tok = start; tok != end; tok = tok->next()) { + for (Token* tok = start; precedes(tok, end); tok = tok->next()) { if (tok->varId() == var->declarationId()) { for (const ValueFlow::Value& value : values) setTokenValue(tok, value, settings); diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index 5b2cb58e47b..7106b1301af 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -6812,6 +6812,14 @@ class TestValueFlow : public TestFixture { " std::shared_ptr m;\n" "};\n"; valueOfTok(code, "r"); + + code = "void f(int a, int b) {\n" // #11423 + " auto g = [](int& a, const int b) -> void {};\n" + " auto h = [&a, &b]() {\n" + " std::swap(a, b);\n" + " };\n" + "}\n"; + valueOfTok(code, "b"); } void valueFlowHang() {