From bdfe43d82c433231d2d91f2834e3f5097a981cb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Wed, 13 Aug 2014 04:03:17 +0200 Subject: [PATCH] Fix hang in libdmtx package. found through daca2. --- lib/valueflow.cpp | 3 ++- test/testvalueflow.cpp | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 952b1674f..d63602ce1 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -1267,7 +1267,8 @@ static void valueFlowForLoopSimplify(Token * const bodyStart, const unsigned int const Token *parent = tok2; while (parent && parent->str() == tok2->str()) parent = parent->astParent(); - if (parent && parent->str() == "(") + // Jump to end of condition + if (parent && parent->str() == "(" && parent->astOperand2()) tok2 = parent->link(); } diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index 36f76063a..c96f95abf 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -1070,6 +1070,13 @@ private: "}\n"; ASSERT_EQUALS(false, testValueOfX(code, 4U, 0)); ASSERT_EQUALS(true, testValueOfX(code, 4U, 9)); + + // hang + code = "void f() {\n" + " for(int i = 0; i < 20; i++)\n" + " n = (int)(i < 10 || abs(negWander) < abs(negTravel));\n" + "}"; + testValueOfX(code,0,0); // <- dont hang } void valueFlowSubFunction() {