From 7995b2fb8672790871dcb2b7fb29efe89b084727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sun, 24 Mar 2019 11:51:28 +0100 Subject: [PATCH] getArguments: Avoid too deep recursion in array initialization --- lib/astutils.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/astutils.cpp b/lib/astutils.cpp index 7d16414e6..6c6833489 100644 --- a/lib/astutils.cpp +++ b/lib/astutils.cpp @@ -1021,13 +1021,14 @@ int numberOfArguments(const Token *start) return arguments; } -static void getArgumentsRecursive(const Token *tok, std::vector *arguments) +static void getArgumentsRecursive(const Token *tok, std::vector *arguments, unsigned int depth) { - if (!tok) + ++depth; + if (!tok || depth >= 100) return; if (tok->str() == ",") { - getArgumentsRecursive(tok->astOperand1(), arguments); - getArgumentsRecursive(tok->astOperand2(), arguments); + getArgumentsRecursive(tok->astOperand1(), arguments, depth); + getArgumentsRecursive(tok->astOperand2(), arguments, depth); } else { arguments->push_back(tok); } @@ -1042,7 +1043,7 @@ std::vector getArguments(const Token *ftok) const Token *startTok = tok->astOperand2(); if (!startTok && Token::simpleMatch(tok->astOperand1(), ",")) startTok = tok->astOperand1(); - getArgumentsRecursive(startTok, &arguments); + getArgumentsRecursive(startTok, &arguments, 0); return arguments; }