[Bf-blender-cvs] [d19443074a8] master: Fix (unreported): off-by-one error when setting curve handles

Jacques Lucke noreply at git.blender.org
Sun Dec 5 14:50:39 CET 2021


Commit: d19443074a8ed9a5717b56f0254bd416c5e76923
Author: Jacques Lucke
Date:   Sun Dec 5 14:49:30 2021 +0100
Branches: master
https://developer.blender.org/rBd19443074a8ed9a5717b56f0254bd416c5e76923

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.

===================================================================

M	source/blender/nodes/geometry/nodes/node_geo_set_curve_handles.cc

===================================================================

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++;



More information about the Bf-blender-cvs mailing list