Fixed #3504 (segmentation fault of cppcheck)
This commit is contained in:
parent
47716ee4ca
commit
0648b3ed5e
|
@ -240,6 +240,9 @@ void TemplateSimplifier::removeTemplates(Token *tok)
|
||||||
|
|
||||||
if (tok2->str() == "(") {
|
if (tok2->str() == "(") {
|
||||||
tok2 = tok2->link();
|
tok2 = tok2->link();
|
||||||
|
} else if (tok2->str() == ")") { // garbage code! (#3504)
|
||||||
|
Token::eraseTokens(tok,tok2);
|
||||||
|
tok->deleteThis();
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (tok2->str() == "{") {
|
else if (tok2->str() == "{") {
|
||||||
|
|
|
@ -57,7 +57,8 @@ private:
|
||||||
TEST_CASE(tokenize23); // tokenize "return - __LINE__;"
|
TEST_CASE(tokenize23); // tokenize "return - __LINE__;"
|
||||||
|
|
||||||
// don't freak out when the syntax is wrong
|
// don't freak out when the syntax is wrong
|
||||||
TEST_CASE(wrong_syntax);
|
TEST_CASE(wrong_syntax1);
|
||||||
|
TEST_CASE(wrong_syntax2);
|
||||||
TEST_CASE(wrong_syntax_if_macro); // #2518 - if MACRO()
|
TEST_CASE(wrong_syntax_if_macro); // #2518 - if MACRO()
|
||||||
|
|
||||||
TEST_CASE(minus);
|
TEST_CASE(minus);
|
||||||
|
@ -617,7 +618,7 @@ private:
|
||||||
ASSERT_EQUALS("return -1 ;", tokenizeAndStringify("return - __LINE__;"));
|
ASSERT_EQUALS("return -1 ;", tokenizeAndStringify("return - __LINE__;"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void wrong_syntax() {
|
void wrong_syntax1() {
|
||||||
{
|
{
|
||||||
errout.str("");
|
errout.str("");
|
||||||
const std::string code("TR(kvmpio, PROTO(int rw), ARGS(rw), TP_(aa->rw;))");
|
const std::string code("TR(kvmpio, PROTO(int rw), ARGS(rw), TP_(aa->rw;))");
|
||||||
|
@ -648,6 +649,18 @@ private:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wrong_syntax2() { // #3504
|
||||||
|
const char code[] = "void f() {\n"
|
||||||
|
" X<int> x;\n"
|
||||||
|
" Y<int, int, int, int, int, char> y;\n"
|
||||||
|
"}\n"
|
||||||
|
"\n"
|
||||||
|
"void G( template <typename T> class (j) ) {}";
|
||||||
|
|
||||||
|
// don't segfault..
|
||||||
|
tokenizeAndStringify(code);
|
||||||
|
}
|
||||||
|
|
||||||
void wrong_syntax_if_macro() {
|
void wrong_syntax_if_macro() {
|
||||||
// #2518
|
// #2518
|
||||||
errout.str("");
|
errout.str("");
|
||||||
|
|
Loading…
Reference in New Issue