Fix #119026: GPv3: Stack use after scope

The arrays `modified_starts` and `modified_ends` was freed early
due to wrong variable scope, this leads to incorrect randomize length
effect in length modifier. Now fixed.

Pull Request: https://projects.blender.org/blender/blender/pulls/119054
This commit is contained in:
YimingWu 2024-03-04 15:30:08 +01:00 committed by YimingWu
parent 2fe717df58
commit 4f70190a01
1 changed files with 5 additions and 2 deletions

View File

@ -128,11 +128,14 @@ static void deform_drawing(const ModifierData &md,
VArray<float> use_starts = VArray<float>::ForSingle(mmd.start_fac, curves_num);
VArray<float> use_ends = VArray<float>::ForSingle(mmd.end_fac, curves_num);
Array<float> modified_starts;
Array<float> modified_ends;
if (mmd.rand_start_fac != 0.0 || mmd.rand_end_fac != 0.0) {
modified_starts = Array<float>(curves.curves_num(), mmd.start_fac);
modified_ends = Array<float>(curves.curves_num(), mmd.start_fac);
/* Use random to modify start/end factors. Put the modified values outside the
* branch so it could be accessed in later stretching/shrinking stages. */
Array<float> modified_starts(curves.curves_num(), mmd.start_fac);
Array<float> modified_ends(curves.curves_num(), mmd.end_fac);
use_starts = VArray<float>::ForSpan(modified_starts.as_mutable_span());
use_ends = VArray<float>::ForSpan(modified_ends.as_mutable_span());