From 2c5434c3f545f0fde4154990d1e6f46ed209f710 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Fri, 24 Feb 2023 16:42:02 +0100 Subject: [PATCH] Fix: crash in Spline Parameter node with single-point-curves This was caught by our tests when they are run in a debug build with asserts. --- .../geometry/nodes/node_geo_curve_spline_parameter.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc index 17f0131ac54..f69200e0dcd 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc @@ -99,6 +99,8 @@ static Array calculate_point_lengths( const Span evaluated_lengths = curves.evaluated_lengths_for_curve(i_curve, is_cyclic); MutableSpan lengths = result.as_mutable_span().slice(points); lengths.first() = 0.0f; + const float last_evaluated_length = evaluated_lengths.is_empty() ? 0.0f : + evaluated_lengths.last(); float total; switch (types[i_curve]) { @@ -107,19 +109,19 @@ static Array calculate_point_lengths( for (const int i : IndexRange(points.size()).drop_back(1)) { lengths[i + 1] = evaluated_lengths[resolution * (i + 1) - 1]; } - total = evaluated_lengths.last(); + total = last_evaluated_length; break; } case CURVE_TYPE_POLY: lengths.drop_front(1).copy_from(evaluated_lengths.take_front(lengths.size() - 1)); - total = evaluated_lengths.last(); + total = last_evaluated_length; break; case CURVE_TYPE_BEZIER: { const Span offsets = curves.bezier_evaluated_offsets_for_curve(i_curve); for (const int i : IndexRange(points.size()).drop_back(1)) { lengths[i + 1] = evaluated_lengths[offsets[i + 1] - 1]; } - total = evaluated_lengths.last(); + total = last_evaluated_length; break; } case CURVE_TYPE_NURBS: {