diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-05-13 09:01:43 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-05-13 09:08:19 +0300 |
commit | 7969b238dbfd697a2590d654090080c862346d76 (patch) | |
tree | e0bbaf89600a2891baede9bf6f35a4fcac829758 /source | |
parent | 7742a8f09c1a631adbbd87a407d55420f775fa4e (diff) |
Fix T39775: Skin modifier crash
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/modifiers/intern/MOD_skin.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/source/blender/modifiers/intern/MOD_skin.c b/source/blender/modifiers/intern/MOD_skin.c index 6c096224b58..1b8b29666e2 100644 --- a/source/blender/modifiers/intern/MOD_skin.c +++ b/source/blender/modifiers/intern/MOD_skin.c @@ -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 */ |