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();
|
labels();
|
||||||
|
|
||||||
simplifyDoWhileAddBraces();
|
simplifyDoWhileAddBraces();
|
||||||
simplifyIfAddBraces();
|
|
||||||
|
if (!simplifyIfAddBraces())
|
||||||
|
return false;
|
||||||
|
|
||||||
// Combine "- %num%" ..
|
// Combine "- %num%" ..
|
||||||
for (Token *tok = _tokens; tok; tok = tok->next())
|
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)
|
for (Token *tok = _tokens; tok; tok = tok ? tok->next() : NULL)
|
||||||
{
|
{
|
||||||
|
@ -4894,10 +4896,13 @@ void Tokenizer::simplifyIfAddBraces()
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If there is no code after he if(), abort
|
// If there is no code after the if(), abort
|
||||||
if (!tok->next())
|
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..
|
// insert open brace..
|
||||||
tok->insertToken("{");
|
tok->insertToken("{");
|
||||||
|
@ -4967,7 +4972,15 @@ void Tokenizer::simplifyIfAddBraces()
|
||||||
tempToken->insertToken("}");
|
tempToken->insertToken("}");
|
||||||
Token::createMutualLinks(tok, tempToken->next());
|
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)
|
bool Tokenizer::simplifyDoWhileAddBracesHelper(Token *tok)
|
||||||
|
|
|
@ -284,8 +284,9 @@ public:
|
||||||
void simplifyComma();
|
void simplifyComma();
|
||||||
|
|
||||||
/** Add braces to an if-block
|
/** Add braces to an if-block
|
||||||
|
* @return true if no syntax errors
|
||||||
*/
|
*/
|
||||||
void simplifyIfAddBraces();
|
bool simplifyIfAddBraces();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add braces to an do-while block
|
* Add braces to an do-while block
|
||||||
|
|
|
@ -337,6 +337,8 @@ private:
|
||||||
|
|
||||||
// a = b = 0;
|
// a = b = 0;
|
||||||
TEST_CASE(multipleAssignment);
|
TEST_CASE(multipleAssignment);
|
||||||
|
|
||||||
|
TEST_CASE(simplifyIfAddBraces); // ticket # 2739 (segmentation fault)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -5611,6 +5613,12 @@ private:
|
||||||
{
|
{
|
||||||
ASSERT_EQUALS("a = b = 0 ;", tokenizeAndStringify("a=b=0;"));
|
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)
|
REGISTER_TEST(TestTokenizer)
|
||||||
|
|
Loading…
Reference in New Issue