Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <jacques@blender.org>2021-12-05 16:49:30 +0300
committerJacques Lucke <jacques@blender.org>2021-12-05 16:49:30 +0300
commitd19443074a8ed9a5717b56f0254bd416c5e76923 (patch)
tree4dc1473fb008f1769bd662cc50760fcea8dbaefa /source/blender
parent5ef5a9fc24668aa264fe0558db9c0fb1246aa37f (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/blender')
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_set_curve_handles.cc4
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++;