From 8f2a6c3122fc82be89d96aa802e7e8dd4ebf286a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Mon, 17 Apr 2017 14:17:45 +0200 Subject: [PATCH] [apps/sequence] Cap the sum of terms to a maximum number of terms Change-Id: Ib9abcdc92cef5e4e188a81c319b20be2c8b7ab72 --- apps/sequence/sequence.cpp | 3 +++ apps/sequence/sequence.h | 1 + 2 files changed, 4 insertions(+) diff --git a/apps/sequence/sequence.cpp b/apps/sequence/sequence.cpp index de99deda6..7bf5144f0 100644 --- a/apps/sequence/sequence.cpp +++ b/apps/sequence/sequence.cpp @@ -274,6 +274,9 @@ float Sequence::evaluateAtAbscissa(float x, Poincare::Context * context) const { float Sequence::sumOfTermsBetweenAbscissa(float start, float end, Context * context) { float result = 0.0f; + if (end-start > k_maxNumberOfTermsInSum) { + return NAN; + } for (float i = roundf(start); i <= roundf(end); i = i + 1.0f) { result += evaluateAtAbscissa(i, context); } diff --git a/apps/sequence/sequence.h b/apps/sequence/sequence.h index b8811487e..23547f431 100644 --- a/apps/sequence/sequence.h +++ b/apps/sequence/sequence.h @@ -35,6 +35,7 @@ public: float sumOfTermsBetweenAbscissa(float start, float end, Poincare::Context * context); private: constexpr static int k_maxRecurrentRank = 10000; + constexpr static float k_maxNumberOfTermsInSum = 100000.0f; char symbol() const override; Type m_type; char m_firstInitialConditionText[TextField::maxBufferSize()];