diff options
author | Hans Goudey <h.goudey@me.com> | 2022-02-23 21:57:04 +0300 |
---|---|---|
committer | Hans Goudey <h.goudey@me.com> | 2022-02-23 21:57:04 +0300 |
commit | dbef66c32f728546c6b0a1759a38e7edd9fa4dfc (patch) | |
tree | 3911116ea235b52ba5266b7b76752858c81d86da /source | |
parent | 398538b914a3c7ff3cf845f4fe6b2bdbb47204cb (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')
-rw-r--r-- | source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc | 17 |
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)); |