Fix T39775: Skin modifier crash

This commit is contained in:
Campbell Barton 2015-05-13 16:01:43 +10:00
parent 7742a8f09c
commit 7969b238db
Notes: blender-bot 2023-02-14 11:01:31 +01:00
Referenced by issue #44566, Skin Modifier - hard crash.
Referenced by issue #39775, Skin modifier crashes with certain meshes
Referenced by issue #39097, Skin modifier crash with null skin radii (C++ assert)
1 changed files with 5 additions and 1 deletions

View File

@ -104,6 +104,9 @@ typedef struct Frame {
/* Merge to target frame/corner (no merge if frame is null) */
struct Frame *frame;
int corner;
/* checked to avoid chaining.
* (merging when we're already been referenced), see T39775 */
unsigned int is_target : 1;
} merge[4];
/* For hull frames, whether each vertex is detached or not */
@ -363,7 +366,7 @@ static void merge_frame_corners(Frame **frames, int totframe)
/* Compare with each corner of all other frames... */
for (l = 0; l < 4; l++) {
if (frames[k]->merge[l].frame)
if (frames[k]->merge[l].frame || frames[k]->merge[l].is_target)
continue;
/* Some additional concerns that could be checked
@ -393,6 +396,7 @@ static void merge_frame_corners(Frame **frames, int totframe)
frames[k]->merge[l].frame = frames[i];
frames[k]->merge[l].corner = j;
frames[i]->merge[j].is_target = true;
/* Can't merge another corner into the same
* frame corner, so move on to frame k+1 */