Finite loop in VBezier::tAtLength() 13/273513/1
authorNicholas Guriev <nicholas@guriev.su>
Fri, 28 May 2021 12:33:22 +0000 (15:33 +0300)
committerjykeon <jykeon@samsung.com>
Thu, 7 Apr 2022 01:53:26 +0000 (10:53 +0900)
Change-Id: I47205f80830d273ac395488f23200fefa1f86d5b
Signed-off-by: jykeon <jykeon@samsung.com>
src/vector/vbezier.cpp

index 797d56440bd19a8e0dba9c7edfde9fdf764fd0c0..15889299def6eaa234a1ff0a39a5228a088d4360 100644 (file)
@@ -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;
 }