Fix #128702: Edge Slide can cause Blender to freeze

In non-manifold geometry, the original loop could fail to identify the
correct slide direction because it checked for loop equality
(`l_other != l_edge`), which might never be met.

The condition has been revised to check for face equality
(`l_other->f != l_edge->f`), ensuring the loop terminates correctly and
preventing infinite iterations in problematic geometry cases.
This commit is contained in:
Germano Cavalcante
2024-10-07 13:23:30 -03:00
parent 9d09362c0c
commit 580e0af309

View File

@@ -2456,7 +2456,7 @@ Array<TransDataEdgeSlideVert> transform_mesh_edge_slide_data_create(const TransD
int best_dir = -1;
const BMLoop *l_edge = l_src->next->v == v_dst ? l_src : l_src->prev;
const BMLoop *l_other = l_edge->radial_next;
while (l_other != l_edge) {
do {
if (l_other->f == curr_side_other->fdata[0].f) {
best_dir = 0;
break;
@@ -2466,7 +2466,7 @@ Array<TransDataEdgeSlideVert> transform_mesh_edge_slide_data_create(const TransD
break;
}
l_other = (l_other->v == this->v ? l_other->prev : l_other->next)->radial_next;
}
} while (l_other->f != l_edge->f);
if (best_dir != -1) {
*r_do_isect_curr_dirs = true;