Fixed crash in Variable::evaluate (#3825)

This commit is contained in:
PKEuS 2012-05-22 01:29:33 -07:00
parent df48b8dfb9
commit e8dfe2407a
2 changed files with 12 additions and 2 deletions

View File

@ -1550,7 +1550,10 @@ void Function::addArguments(const SymbolDatabase *symbolDatabase, const Scope *s
const Token* endTok = NULL;
const Token* nameTok = NULL;
while (tok->str() != "," && tok->str() != ")" && tok->str() != "=") {
if (tok->str() == "," || tok->str() == ")")
return; // Syntax error
do {
if (tok->varId() != 0) {
nameTok = tok;
endTok = tok->previous();
@ -1569,7 +1572,7 @@ void Function::addArguments(const SymbolDatabase *symbolDatabase, const Scope *s
if (!tok) // something is wrong so just bail
return;
}
} while (tok->str() != "," && tok->str() != ")" && tok->str() != "=");
const Token *typeTok = startTok->tokAt(startTok->str() == "const" ? 1 : 0);
if (typeTok->str() == "struct")

View File

@ -109,6 +109,7 @@ private:
TEST_CASE(functionArgs1);
TEST_CASE(functionArgs2);
TEST_CASE(functionArgs3);
TEST_CASE(namespaces1);
TEST_CASE(namespaces2);
@ -786,6 +787,12 @@ private:
ASSERT_EQUALS(4UL, a->dimension(1));
}
void functionArgs3() {
GET_SYMBOL_DB("void f(int i,) { }"); // Don't crash
const Variable *a = db->getVariableFromVarId(1);
ASSERT_EQUALS("i", a->nameToken()->str());
}
void namespaces1() {
GET_SYMBOL_DB("namespace fred {\n"
" namespace barney {\n"