Fix #104358: Crash with broken writing to freed evaluated mesh #104835

Closed
Hans Goudey wants to merge 2 commits from HooglyBoogly:fix-crash-absolutely-broken-fix-deforms-op into blender-v3.5-release

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.
1 changed files with 3 additions and 9 deletions

View File

@ -1354,13 +1354,11 @@ static void moveCloserToDistanceFromPlane(Depsgraph *depsgraph,
{
Scene *scene_eval = DEG_get_evaluated_scene(depsgraph);
Object *object_eval = DEG_get_evaluated_object(depsgraph, ob);
Mesh *mesh_eval = (Mesh *)object_eval->data;
Mesh *me_deform;
MDeformWeight *dw, *dw_eval;
MDeformWeight *dw;
float3 m;
MDeformVert *dvert = me->deform_verts_for_write().data() + index;
MDeformVert *dvert_eval = mesh_eval->deform_verts_for_write().data() + index;
int totweight = dvert->totweight;
float oldw = 0;
float oldPos[3] = {0};
@ -1383,8 +1381,7 @@ static void moveCloserToDistanceFromPlane(Depsgraph *depsgraph,
do {
wasChange = false;
me_deform = mesh_get_eval_deform(depsgraph, scene_eval, object_eval, &CD_MASK_BAREMESH);
const Span<float3> positions = me_deform->vert_positions();
m = positions[index];
m = me_deform->vert_positions()[index];
copy_v3_v3(oldPos, m);
distToStart = dot_v3v3(norm, oldPos) + d;
@ -1394,7 +1391,6 @@ static void moveCloserToDistanceFromPlane(Depsgraph *depsgraph,
for (i = 0; i < totweight; i++) {
dwIndices[i] = i;
dw = (dvert->dw + i);
dw_eval = (dvert_eval->dw + i);
vc = hc = 0;
if (!dw->weight) {
changes[i][0] = 0;
@ -1424,12 +1420,10 @@ static void moveCloserToDistanceFromPlane(Depsgraph *depsgraph,
if (dw->weight > 1) {
dw->weight = 1;
}
dw_eval->weight = dw->weight;
me_deform = mesh_get_eval_deform(depsgraph, scene_eval, object_eval, &CD_MASK_BAREMESH);
m = positions[index];
m = me_deform->vert_positions()[index];
getVerticalAndHorizontalChange(norm, d, coord, oldPos, distToStart, m, changes, dists, i);
dw->weight = oldw;
dw_eval->weight = oldw;
if (!k) {
vc = changes[i][0];
hc = changes[i][1];