diff --git a/dynare++/tl/cc/tl_static.cc b/dynare++/tl/cc/tl_static.cc index 54c997c5e4df6f41056d849f9fe1dec187441b76..03a7b312d4d42db2aab9bf9dfe10551117990e08 100644 --- a/dynare++/tl/cc/tl_static.cc +++ b/dynare++/tl/cc/tl_static.cc @@ -2,8 +2,11 @@ #include "tl_static.hh" #include "pascal_triangle.hh" +#include "tl_exception.hh" #include <mutex> +#include <limits> +#include <cmath> /* Note that we allow for repeated calls of |init|. This is not normal and the only purpose of allowing this is the test suite. */ @@ -29,6 +32,10 @@ namespace TLStatic void init(int dim, int nvar) { + // Check that tensor indices will not overflow (they are stored as signed int, hence on 31 bits) + if (std::log2(nvar)*dim > std::numeric_limits<int>::digits) + throw TLException(__FILE__, __LINE__, "Problem too large, you should decrease the approximation order"); + std::lock_guard<std::mutex>{mut}; ebundle.generateUpTo(dim); pbundle.generateUpTo(dim);