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:
authorHans Goudey <h.goudey@me.com>2022-02-23 21:57:04 +0300
committerHans Goudey <h.goudey@me.com>2022-02-23 21:57:04 +0300
commitdbef66c32f728546c6b0a1759a38e7edd9fa4dfc (patch)
tree3911116ea235b52ba5266b7b76752858c81d86da /source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc
parent398538b914a3c7ff3cf845f4fe6b2bdbb47204cb (diff)
Fix T95952: Uninitialized value used in Bezier Segment node
0fd72a98ac1377a385b6 called functions to set bezier handle positions that used uninitialized memory. The fix is to define the handle positions explicitly, like before.
Diffstat (limited to 'source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc')
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc17
1 files changed, 13 insertions, 4 deletions
diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc
index 7d84ddf9917..6e1c8a80a00 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc
@@ -91,13 +91,22 @@ static std::unique_ptr<CurveEval> create_bezier_segment_curve(
positions.first() = start;
positions.last() = end;
+ MutableSpan<float3> handles_right = spline->handle_positions_right();
+ MutableSpan<float3> handles_left = spline->handle_positions_left();
+
if (mode == GEO_NODE_CURVE_PRIMITIVE_BEZIER_SEGMENT_POSITION) {
- spline->set_handle_position_right(0, start_handle_right);
- spline->set_handle_position_left(1, end_handle_left);
+ handles_left.first() = 2.0f * start - start_handle_right;
+ handles_right.first() = start_handle_right;
+
+ handles_left.last() = end_handle_left;
+ handles_right.last() = 2.0f * end - end_handle_left;
}
else {
- spline->set_handle_position_right(0, start + start_handle_right);
- spline->set_handle_position_left(1, end + end_handle_left);
+ handles_left.first() = start - start_handle_right;
+ handles_right.first() = start + start_handle_right;
+
+ handles_left.last() = end + end_handle_left;
+ handles_right.last() = end - end_handle_left;
}
curve->add_spline(std::move(spline));