Skip to content

Commit e7ddd9c

Browse files
committed
ForwardAnalyzer: Add recursion limit 10000
1 parent 6a3cfdf commit e7ddd9c

1 file changed

Lines changed: 5 additions & 3 deletions

File tree

lib/forwardanalyzer.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,17 @@ struct ForwardTraversal {
5858
}
5959

6060
template<class T, REQUIRES("T must be a Token class", std::is_convertible<T*, const Token*>)>
61-
Progress traverseRecursive(T* tok, std::function<Progress(T*)> f, bool traverseUnknown) {
61+
Progress traverseRecursive(T* tok, std::function<Progress(T*)> f, bool traverseUnknown, unsigned int recursion=0) {
6262
if (!tok)
6363
return Progress::Continue;
64-
if (tok->astOperand1() && traverseRecursive(tok->astOperand1(), f, traverseUnknown) == Progress::Break)
64+
if (recursion > 10000)
65+
return Progress::Skip;
66+
if (tok->astOperand1() && traverseRecursive(tok->astOperand1(), f, traverseUnknown, recursion+1) == Progress::Break)
6567
return Progress::Break;
6668
Progress p = traverseTok(tok, f, traverseUnknown);
6769
if (p == Progress::Break)
6870
return Progress::Break;
69-
if (p == Progress::Continue && traverseRecursive(tok->astOperand2(), f, traverseUnknown) == Progress::Break)
71+
if (p == Progress::Continue && traverseRecursive(tok->astOperand2(), f, traverseUnknown, recursion+1) == Progress::Break)
7072
return Progress::Break;
7173
return Progress::Continue;
7274
}

0 commit comments

Comments
 (0)