Commit: a66116f5439fa5ebf33a27867e846006ac20f78d
Author: Campbell Barton
Date:   Fri Apr 1 06:22:30 2016 +1100
Branches: blender-v2.77-release
https://developer.blender.org/rBa66116f5439fa5ebf33a27867e846006ac20f78d

Fix T48012: Knife Project crash

===================================================================

M       source/blender/bmesh/intern/bmesh_polygon_edgenet.c

===================================================================

diff --git a/source/blender/bmesh/intern/bmesh_polygon_edgenet.c 
b/source/blender/bmesh/intern/bmesh_polygon_edgenet.c
index 1ee96d4..e9d43eb 100644
--- a/source/blender/bmesh/intern/bmesh_polygon_edgenet.c
+++ b/source/blender/bmesh/intern/bmesh_polygon_edgenet.c
@@ -1485,12 +1485,26 @@ finally:
 #ifdef USE_PARTIAL_CONNECT
        /* don't free 'vert_temp_pair_list', its part of the arena */
        if (use_partial_connect) {
+
+               /* Sanity check: ensure we don't have connecting edges before 
splicing begins. */
+#ifdef DEBUG
+               {
+                       struct TempVertPair *tvp = temp_vert_pairs.list;
+                       do {
+                               /* we must _never_ create connections here
+                                * (inface the islands can't have a connection 
at all) */
+                               BLI_assert(BM_edge_exists(tvp->v_orig, 
tvp->v_temp) == NULL);
+                       } while ((tvp = tvp->next));
+               }
+#endif
+
                struct TempVertPair *tvp = temp_vert_pairs.list;
                do {
-                       /* we must _never_ create connections here
-                        * (inface the islands can't have a connection at all) 
*/
-                       BLI_assert(BM_edge_exists(tvp->v_orig, tvp->v_temp) == 
NULL);
-                       BM_vert_splice(bm, tvp->v_orig, tvp->v_temp);
+                       /* its _very_ unlikely the edge exists,
+                        * however splicing may case this. see: T48012 */
+                       if (!BM_edge_exists(tvp->v_orig, tvp->v_temp)) {
+                               BM_vert_splice(bm, tvp->v_orig, tvp->v_temp);
+                       }
                } while ((tvp = tvp->next));
 
                /* Remove edges which have become doubles since splicing 
vertices together,

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to