From 5099ca3c8bad6b4853d8cc036235cacb320d2de6 Mon Sep 17 00:00:00 2001 From: Paul Fultz II Date: Tue, 8 Sep 2020 13:14:10 -0500 Subject: [PATCH] Fix issue 9882: segfault in ForwardTraversal (#2785) --- lib/valueflow.cpp | 2 +- test/testvalueflow.cpp | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 3ad0072f4..2877fc85b 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -412,7 +412,7 @@ static void setTokenValue(Token* tok, const ValueFlow::Value &value, const Setti if (value.isContainerSizeValue()) { // .empty, .size, +"abc", +'a' - if (parent->str() == "+") { + if (parent->str() == "+" && parent->astOperand1() && parent->astOperand2()) { for (const ValueFlow::Value &value1 : parent->astOperand1()->values()) { for (const ValueFlow::Value &value2 : parent->astOperand2()->values()) { if (value1.path != value2.path) diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index 0bd7f70d0..12c1d5cb5 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -4715,6 +4715,15 @@ private: " return x;\n" "}\n"; valueOfTok(code, "x"); + + code = "void f() {\n" + " std::string a = b[c->d()];\n" + " if(a.empty()) {\n" + " INFO(std::string{\"a\"} + c->d());\n" + " INFO(std::string{\"b\"} + a);\n" + " }\n" + "}\n"; + valueOfTok(code, "a"); } void valueFlowHang() {