From e50cc3a0bd6daa57528e87940c0fc3e1ecac284d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Tue, 5 Jun 2018 09:53:24 +0200 Subject: [PATCH] [poincare] Avoid infinite loop in intersection/extrema solver --- poincare/src/expression.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/poincare/src/expression.cpp b/poincare/src/expression.cpp index 4b9805361..e761e2532 100644 --- a/poincare/src/expression.cpp +++ b/poincare/src/expression.cpp @@ -491,8 +491,11 @@ Expression::Coordinate2D Expression::nextIntersection(char symbol, double start, } Expression::Coordinate2D Expression::nextMinimumOfExpression(char symbol, double start, double step, double max, EvaluationAtAbscissa evaluate, Context & context, const Expression * expression, bool lookForRootMinimum) const { - double bracket[3]; Coordinate2D result = {.abscissa = NAN, .value = NAN}; + if (start == max || step == 0.0) { + return result; + } + double bracket[3]; double x = start; bool endCondition = false; do { @@ -638,6 +641,9 @@ Expression::Coordinate2D Expression::brentMinimum(char symbol, double ax, double } double Expression::nextIntersectionWithExpression(char symbol, double start, double step, double max, EvaluationAtAbscissa evaluation, Context & context, const Expression * expression) const { + if (start == max || step == 0.0) { + return NAN; + } double bracket[2]; double result = NAN; static double precisionByGradUnit = 1E6;