From 30e8814ecb8e22f6a044d5835607fbf6aadde44d Mon Sep 17 00:00:00 2001 From: chrchr-github <78114321+chrchr-github@users.noreply.github.com> Date: Mon, 11 Dec 2023 17:15:21 +0100 Subject: [PATCH] Fix #12255 Crash in executeMultiCondition() (#5752) --- lib/programmemory.cpp | 2 ++ test/testvalueflow.cpp | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/lib/programmemory.cpp b/lib/programmemory.cpp index 3a140424f..cbe4d34c5 100644 --- a/lib/programmemory.cpp +++ b/lib/programmemory.cpp @@ -1341,6 +1341,8 @@ namespace { for (const auto& p : *pm) { const Token* tok = p.first.tok; + if (!tok) + continue; const ValueFlow::Value& value = p.second; if (tok->str() == expr->str() && !astHasExpr(tok, expr->exprId())) { diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index 315cc73c3..df9f50dcd 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -7275,6 +7275,17 @@ private: " if (a && b) {}\n" "}\n"; valueOfTok(code, "a"); + + code = "void g(const char* fmt, ...);\n" // #12255 + "void f(const char* fmt, const char* msg) {\n" + " const char* p = msg;\n" + " g(\"%s\", msg);\n" + "}\n" + "void g(const char* fmt, ...) {\n" + " const char* q = fmt;\n" + " if (*q > 0 && *q < 100) {}\n" + "}\n"; + valueOfTok(code, "&&"); } void valueFlowHang() {