diff options
author | Nikolai Kosjar <nikolai.kosjar@theqtcompany.com> | 2015-07-02 16:36:14 +0200 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@theqtcompany.com> | 2015-07-06 12:11:43 +0000 |
commit | 9d5c85a6359769d4ad37ea2f1fded65d03824b25 (patch) | |
tree | d648943267af9647ff593b5f73d0f23b466d3b99 /src/libs/3rdparty/cplusplus/Parser.cpp | |
parent | 17a4e76c509a0b343c0dafefaa044b6a2272da81 (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.cpp | 6 |
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(); |