From 9863aa9ab275857146cb75017bed4e7505d88402 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Thu, 11 Dec 2014 16:09:55 -0500 Subject: [PATCH] #1051 Detect recursion after 1M tail recursion iterations --- src/func.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/func.cc b/src/func.cc index c7e26193..e6830099 100644 --- a/src/func.cc +++ b/src/func.cc @@ -36,6 +36,7 @@ #include "stl-utils.h" #include "printutils.h" #include "stackcheck.h" +#include "exceptions.h" #include #include @@ -150,9 +151,12 @@ ValuePtr FunctionTailRecursion::evaluate(const Context *ctx, const EvalContext * EvalContext ec(&c, call->call_arguments); Context tmp(&c); + unsigned int counter = 0; while (invert ^ expr->first->evaluate(&c)) { tmp.setVariables(definition_arguments, &ec); c.apply_variables(tmp); + + if (counter++ == 1000000) throw RecursionException("function", this->name); } ValuePtr result = endexpr->evaluate(&c);