[gtk/matthiasc/lottie2] path: Handle degenerate paths without crashing
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc: 
- Subject: [gtk/matthiasc/lottie2] path: Handle degenerate paths without crashing
- Date: Thu, 26 Nov 2020 19:29:37 +0000 (UTC)
commit 06c866b99fbbbd72fdf80000094d314668e25182
Author: Matthias Clasen <mclasen redhat com>
Date:   Thu Nov 26 14:21:53 2020 -0500
    path: Handle degenerate paths without crashing
    
    When calling get_point on a path which only contains
    a move, we were crashing. Fix this by adding the same
    special case handling that get_closest_point already
    has.
 gsk/gskpath.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
---
diff --git a/gsk/gskpath.c b/gsk/gskpath.c
index 10c93abed1..896a58a544 100644
--- a/gsk/gskpath.c
+++ b/gsk/gskpath.c
@@ -1003,6 +1003,9 @@ gsk_standard_contour_measure_add_point (const graphene_point_t *from,
   float seg_length;
 
   seg_length = graphene_point_distance (from, to, NULL, NULL);
+  if (seg_length == 0)
+    return;
+
   decomp->measure.end += seg_length;
   decomp->measure.start_progress = from_progress;
   decomp->measure.end_progress = to_progress;
@@ -1140,6 +1143,18 @@ gsk_standard_contour_get_point (const GskContour *contour,
   float progress;
   GskStandardContourMeasure *measure;
 
+  if (array->len == 0)
+    {
+      /* This is the special case for point-only */
+      if (pos)
+        *pos = self->points[0];
+
+      if (tangent)
+        *tangent = *graphene_vec2_x_axis ();
+
+      return;
+    }
+
   if (!g_array_binary_search (array, &distance, gsk_standard_contour_find_measure, &index))
     index = array->len - 1;
   measure = &g_array_index (array, GskStandardContourMeasure, index);
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]