diff options
author | Jacques Lucke <jacques@blender.org> | 2021-12-05 16:49:30 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2021-12-05 16:49:30 +0300 |
commit | d19443074a8ed9a5717b56f0254bd416c5e76923 (patch) | |
tree | 4dc1473fb008f1769bd662cc50760fcea8dbaefa /source | |
parent | 5ef5a9fc24668aa264fe0558db9c0fb1246aa37f (diff) |
Fix (unreported): off-by-one error when setting curve handles
The problem is that `current_mask` can become `selection.size()`.
The loop could also be refactored to break out of it when the end
of the selection is reached. This can be done separately.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/nodes/geometry/nodes/node_geo_set_curve_handles.cc | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/source/blender/nodes/geometry/nodes/node_geo_set_curve_handles.cc b/source/blender/nodes/geometry/nodes/node_geo_set_curve_handles.cc index f0b8579ae7d..5382b69feae 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_set_curve_handles.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_set_curve_handles.cc @@ -75,7 +75,7 @@ static void set_position_in_component(const GeometryNodeCurveHandleMode mode, if (spline->type() == Spline::Type::Bezier) { BezierSpline &bezier = static_cast<BezierSpline &>(*spline); for (int i : bezier.positions().index_range()) { - if (selection[current_mask] == current_point) { + if (current_mask < selection.size() && selection[current_mask] == current_point) { if (mode & GEO_NODE_CURVE_HANDLE_LEFT) { if (bezier.handle_types_left()[i] == BezierSpline::HandleType::Vector) { bezier.ensure_auto_handles(); @@ -103,7 +103,7 @@ static void set_position_in_component(const GeometryNodeCurveHandleMode mode, } else { for (int UNUSED(i) : spline->positions().index_range()) { - if (selection[current_mask] == current_point) { + if (current_mask < selection.size() && selection[current_mask] == current_point) { current_mask++; } current_point++; |