From 49df3d811aa27e9a05c795b5ea22f9249aac7269 Mon Sep 17 00:00:00 2001 From: Paul Fultz II Date: Sun, 29 Aug 2021 13:45:31 -0500 Subject: [PATCH] Validate asserts in the AST to fix crash in 10442 (#3428) --- lib/tokenlist.cpp | 4 ++-- test/testassert.cpp | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/tokenlist.cpp b/lib/tokenlist.cpp index f10286bec..20048e5a4 100644 --- a/lib/tokenlist.cpp +++ b/lib/tokenlist.cpp @@ -1663,8 +1663,8 @@ void TokenList::validateAst() const throw InternalError(tok, "Syntax Error: AST broken, binary operator '" + tok->str() + "' doesn't have two operands.", InternalError::AST); } - // Check control blocks - if (Token::Match(tok->previous(), "if|while|for|switch (")) { + // Check control blocks and asserts + if (Token::Match(tok->previous(), "if|while|for|switch|assert|ASSERT (")) { if (!tok->astOperand1() || !tok->astOperand2()) throw InternalError(tok, "Syntax Error: AST broken, '" + tok->previous()->str() + diff --git a/test/testassert.cpp b/test/testassert.cpp index 99dd0eeda..759f89858 100644 --- a/test/testassert.cpp +++ b/test/testassert.cpp @@ -136,7 +136,7 @@ private: " void Foo();\n" "};\n" "void foo(SquarePack s) {\n" - " assert( s.Foo(); );\n" + " assert( s.Foo() );\n" "}"); ASSERT_EQUALS("[test.cpp:5]: (warning) Assert statement calls a function which may have desired side effects: 'Foo'.\n", errout.str()); @@ -144,7 +144,7 @@ private: " void Foo() const;\n" "};\n" "void foo(SquarePack* s) {\n" - " assert( s->Foo(); );\n" + " assert( s->Foo() );\n" "}"); ASSERT_EQUALS("", errout.str()); @@ -152,14 +152,14 @@ private: " static void Foo();\n" "};\n" "void foo(SquarePack* s) {\n" - " assert( s->Foo(); );\n" + " assert( s->Foo() );\n" "}"); ASSERT_EQUALS("", errout.str()); check("struct SquarePack {\n" "};\n" "void foo(SquarePack* s) {\n" - " assert( s->Foo(); );\n" + " assert( s->Foo() );\n" "}"); ASSERT_EQUALS("", errout.str()); }