From a1f9b0513523e79feb2c93e590d5fe9dbfed64ee Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Wed, 11 Nov 2009 16:34:41 +0100 Subject: [PATCH] Fixed possible crash in CheckName Done with: Erik Verbruggen --- src/shared/cplusplus/CheckName.cpp | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/shared/cplusplus/CheckName.cpp b/src/shared/cplusplus/CheckName.cpp index 6476b3295f1..63a1885128a 100644 --- a/src/shared/cplusplus/CheckName.cpp +++ b/src/shared/cplusplus/CheckName.cpp @@ -378,12 +378,14 @@ bool CheckName::visit(TemplateIdAST *ast) bool CheckName::visit(ObjCSelectorWithoutArgumentsAST *ast) { - std::vector<Name *> names; - Identifier *id = control()->findOrInsertIdentifier(spell(ast->name_token)); - NameId *nameId = control()->nameId(id); - names.push_back(nameId); - _name = control()->selectorNameId(&names[0], names.size(), false); - ast->selector_name = _name; + if (ast->name_token) { + std::vector<Name *> names; + Identifier *id = control()->findOrInsertIdentifier(spell(ast->name_token)); + NameId *nameId = control()->nameId(id); + names.push_back(nameId); + _name = control()->selectorNameId(&names[0], names.size(), false); + ast->selector_name = _name; + } return false; } @@ -392,9 +394,14 @@ bool CheckName::visit(ObjCSelectorWithArgumentsAST *ast) { std::vector<Name *> names; for (ObjCSelectorArgumentListAST *it = ast->selector_argument_list; it; it = it->next) { - Identifier *id = control()->findOrInsertIdentifier(spell(it->value->name_token)); - NameId *nameId = control()->nameId(id); - names.push_back(nameId); + if (it->value->name_token) { + Identifier *id = control()->findOrInsertIdentifier(spell(it->value->name_token)); + NameId *nameId = control()->nameId(id); + names.push_back(nameId); + } else { + // we have an incomplete name due, probably due to error recovery. So, back out completely + return false; + } } if (!names.empty()) { -- GitLab