aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/3rdparty/cplusplus/Parser.cpp
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2015-07-02 16:36:14 +0200
committerNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2015-07-06 12:11:43 +0000
commit9d5c85a6359769d4ad37ea2f1fded65d03824b25 (patch)
treed648943267af9647ff593b5f73d0f23b466d3b99 /src/libs/3rdparty/cplusplus/Parser.cpp
parent17a4e76c509a0b343c0dafefaa044b6a2272da81 (diff)
C++: Limit parsing of initializer clauses II
This completes commit e69d20e10bf040c78a98d42514453d990aa56217 C++: Limit parsing of initializer clauses by handling the following code path: -------- parseExpressionStatement --------- parseExpression ---------- parseCastExpression ----------- parseUnaryExpression ------------ parsePostfixExpression ------------- parseCorePostfixExpression -------------- parsePrimaryExpression --------------- parseNumericLiteral ---------- parseExpressionWithOperatorPrecedence ----------- parseInitializerClause0x ------------ parseAssignmentExpression ------------- parseCastExpression -------------- parseUnaryExpression --------------- parsePostfixExpression ---------------- parseCorePostfixExpression ----------------- parsePrimaryExpression ------------------ parseNumericLiteral ------------- parseExpressionWithOperatorPrecedence ----------- parseInitializerClause0x ------------ parseAssignmentExpression ------------- parseCastExpression -------------- parseUnaryExpression --------------- parsePostfixExpression ---------------- parseCorePostfixExpression ----------------- parsePrimaryExpression ------------------ parseNumericLiteral ------------- parseExpressionWithOperatorPrecedence ----------- parseInitializerClause0x ... Task-number: QTCREATORBUG-14645 Change-Id: I8a71fd687e15a3a4ae26e7b9830276464e3fa76e Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
Diffstat (limited to 'src/libs/3rdparty/cplusplus/Parser.cpp')
-rw-r--r--src/libs/3rdparty/cplusplus/Parser.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/libs/3rdparty/cplusplus/Parser.cpp b/src/libs/3rdparty/cplusplus/Parser.cpp
index 962afdf240..da67e51b63 100644
--- a/src/libs/3rdparty/cplusplus/Parser.cpp
+++ b/src/libs/3rdparty/cplusplus/Parser.cpp
@@ -5593,7 +5593,13 @@ void Parser::parseExpressionWithOperatorPrecedence(ExpressionAST *&lhs, int minP
{
DEBUG_THIS_RULE();
+ unsigned iterations = 0;
while (precedence(tok().kind(), _templateArguments) >= minPrecedence) {
+ if (++iterations > MAX_EXPRESSION_DEPTH) {
+ warning(cursor(), "Reached parse limit for expression");
+ return;
+ }
+
const int operPrecedence = precedence(tok().kind(), _templateArguments);
const int oper = consumeToken();