From df11fc95f94f3dd11bd2e74f4e29640538e5c050 Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Tue, 26 Jan 2010 12:45:58 +0100 Subject: [PATCH] Introduced a few paranoia checks. --- src/shared/cplusplus/Parser.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index 90631494a50..9ab40ce6f75 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -1603,9 +1603,16 @@ bool Parser::parseClassSpecifier(SpecifierListAST *&node) unsigned start_declaration = cursor(); DeclarationAST *declaration = 0; if (parseMemberSpecification(declaration)) { - *declaration_ptr = new (_pool) DeclarationListAST; - (*declaration_ptr)->value = declaration; - declaration_ptr = &(*declaration_ptr)->next; + if (declaration) { // paranoia check + *declaration_ptr = new (_pool) DeclarationListAST; + (*declaration_ptr)->value = declaration; + declaration_ptr = &(*declaration_ptr)->next; + } + + if (cursor() == start_declaration) { // more paranoia + rewind(start_declaration + 1); + skipUntilDeclaration(); + } } else { _translationUnit->error(start_declaration, "expected a declaration"); rewind(start_declaration + 1); -- GitLab