diff options
| -rw-r--r-- | lexers/LexCPP.cxx | 5 | 
1 files changed, 4 insertions, 1 deletions
| diff --git a/lexers/LexCPP.cxx b/lexers/LexCPP.cxx index d884c212f..9e99b5ce8 100644 --- a/lexers/LexCPP.cxx +++ b/lexers/LexCPP.cxx @@ -1412,7 +1412,10 @@ void LexerCPP::EvaluateTokens(std::vector<std::string> &tokens, const SymbolTabl  	}  	// Evaluate identifiers -	for (size_t i=0; i<tokens.size();) { +	const size_t maxIterations = 100; +	size_t iterations = 0;	// Limit number of iterations in case there is a recursive macro. +	for (size_t i = 0; (i<tokens.size()) && (iterations < maxIterations);) { +		iterations++;  		if (setWordStart.Contains(static_cast<unsigned char>(tokens[i][0]))) {  			SymbolTable::const_iterator it = preprocessorDefinitions.find(tokens[i]);  			if (it != preprocessorDefinitions.end()) { | 
