From e44c122bad4eebfda266724f4f5188eb54450818 Mon Sep 17 00:00:00 2001 From: Nicholas Guriev Date: Fri, 28 May 2021 15:33:22 +0300 Subject: [PATCH] Finite loop in VBezier::tAtLength() Change-Id: I47205f80830d273ac395488f23200fefa1f86d5b Signed-off-by: jykeon --- src/vector/vbezier.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/vector/vbezier.cpp b/src/vector/vbezier.cpp index 797d564..1588929 100644 --- a/src/vector/vbezier.cpp +++ b/src/vector/vbezier.cpp @@ -81,12 +81,12 @@ float VBezier::tAtLength(float l, float totalLength) const t *= 0.5; float lastBigger = 1.0; - while (1) { + for (int num = 0; num < 100500; num++) { VBezier right = *this; VBezier left; right.parameterSplitLeft(t, &left); float lLen = left.length(); - if (fabs(lLen - l) < error) break; + if (fabs(lLen - l) < error) return t; if (lLen < l) { t += (lastBigger - t) * 0.5f; @@ -95,6 +95,7 @@ float VBezier::tAtLength(float l, float totalLength) const t -= t * 0.5f; } } + vWarning << "no convergence"; return t; } -- 2.34.1