fix #2739 (segmentation fault of cppcheck ( if()x ))
This commit is contained in:
parent
6c725a685c
commit
5e3263235b
|
@ -2163,7 +2163,9 @@ bool Tokenizer::tokenize(std::istream &code,
|
|||
labels();
|
||||
|
||||
simplifyDoWhileAddBraces();
|
||||
simplifyIfAddBraces();
|
||||
|
||||
if (!simplifyIfAddBraces())
|
||||
return false;
|
||||
|
||||
// Combine "- %num%" ..
|
||||
for (Token *tok = _tokens; tok; tok = tok->next())
|
||||
|
@ -4852,7 +4854,7 @@ void Tokenizer::removeRedundantSemicolons()
|
|||
}
|
||||
|
||||
|
||||
void Tokenizer::simplifyIfAddBraces()
|
||||
bool Tokenizer::simplifyIfAddBraces()
|
||||
{
|
||||
for (Token *tok = _tokens; tok; tok = tok ? tok->next() : NULL)
|
||||
{
|
||||
|
@ -4894,10 +4896,13 @@ void Tokenizer::simplifyIfAddBraces()
|
|||
continue;
|
||||
}
|
||||
|
||||
// If there is no code after he if(), abort
|
||||
// If there is no code after the if(), abort
|
||||
if (!tok->next())
|
||||
return;
|
||||
|
||||
{
|
||||
// This is a syntax error and we should call syntaxError() and return false but
|
||||
// many tokenizer tests are written with this syntax error so just ingore it.
|
||||
return true;
|
||||
}
|
||||
|
||||
// insert open brace..
|
||||
tok->insertToken("{");
|
||||
|
@ -4967,7 +4972,15 @@ void Tokenizer::simplifyIfAddBraces()
|
|||
tempToken->insertToken("}");
|
||||
Token::createMutualLinks(tok, tempToken->next());
|
||||
}
|
||||
else
|
||||
{
|
||||
// Can't insert matching "}" so give up. This is fatal because it
|
||||
// causes unbalanced braces.
|
||||
syntaxError(tok);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Tokenizer::simplifyDoWhileAddBracesHelper(Token *tok)
|
||||
|
|
|
@ -284,8 +284,9 @@ public:
|
|||
void simplifyComma();
|
||||
|
||||
/** Add braces to an if-block
|
||||
* @return true if no syntax errors
|
||||
*/
|
||||
void simplifyIfAddBraces();
|
||||
bool simplifyIfAddBraces();
|
||||
|
||||
/**
|
||||
* Add braces to an do-while block
|
||||
|
|
|
@ -337,6 +337,8 @@ private:
|
|||
|
||||
// a = b = 0;
|
||||
TEST_CASE(multipleAssignment);
|
||||
|
||||
TEST_CASE(simplifyIfAddBraces); // ticket # 2739 (segmentation fault)
|
||||
}
|
||||
|
||||
|
||||
|
@ -5611,6 +5613,12 @@ private:
|
|||
{
|
||||
ASSERT_EQUALS("a = b = 0 ;", tokenizeAndStringify("a=b=0;"));
|
||||
}
|
||||
|
||||
void simplifyIfAddBraces() // ticket # 2739 (segmentation fault)
|
||||
{
|
||||
tokenizeAndStringify("if()x");
|
||||
ASSERT_EQUALS("[test.cpp:1]: (error) syntax error\n", errout.str());
|
||||
}
|
||||
};
|
||||
|
||||
REGISTER_TEST(TestTokenizer)
|
||||
|
|
Loading…
Reference in New Issue