[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54875] trunk/blender/source/blender/ editors/transform/transform.c: fix [#34415] Edge slide results in segmentation fault on certain mesh

Campbell Barton ideasman42 at gmail.com
Tue Feb 26 04:20:13 CET 2013


Revision: 54875
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54875
Author:   campbellbarton
Date:     2013-02-26 03:20:10 +0000 (Tue, 26 Feb 2013)
Log Message:
-----------
fix [#34415] Edge slide results in segmentation fault on certain mesh

Modified Paths:
--------------
    trunk/blender/source/blender/editors/transform/transform.c

Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c	2013-02-26 02:36:58 UTC (rev 54874)
+++ trunk/blender/source/blender/editors/transform/transform.c	2013-02-26 03:20:10 UTC (rev 54875)
@@ -5285,6 +5285,7 @@
 			TransDataEdgeSlideVert *sv;
 
 			/* XXX, 'sv' will initialize multiple times, this is suspicious. see [#34024] */
+			BLI_assert(BLI_smallhash_haskey(&table, (uintptr_t)v) != false);
 			sv = sv_array + GET_INT_FROM_POINTER(BLI_smallhash_lookup(&table, (uintptr_t)v));
 			sv->v = v;
 			sv->origvert = *v;
@@ -5307,6 +5308,7 @@
 			e1 = e;
 			e = get_other_edge(v, e);
 			if (!e) {
+				BLI_assert(BLI_smallhash_haskey(&table, (uintptr_t)v) != false);
 				sv = sv_array + GET_INT_FROM_POINTER(BLI_smallhash_lookup(&table, (uintptr_t)v));
 				sv->v = v;
 				sv->origvert = *v;
@@ -5331,6 +5333,12 @@
 			l1 = get_next_loop(v, l1, e1, e, vec);
 			l2 = l2 ? get_next_loop(v, l2, e1, e, vec2) : NULL;
 
+			if (UNLIKELY(l1 == NULL && l2 != NULL)) {
+				l1 = l2;
+				l2 = NULL;
+				swap_v3_v3(vec, vec2);
+			}
+
 			BM_elem_flag_disable(v, BM_ELEM_TAG);
 			BM_elem_flag_disable(v2, BM_ELEM_TAG);
 		} while (e != v_first->e && l1);
@@ -5372,6 +5380,7 @@
 						continue;
 					}
 
+					BLI_assert(BLI_smallhash_haskey(&table, (uintptr_t)v) != false);
 					j = GET_INT_FROM_POINTER(BLI_smallhash_lookup(&table, (uintptr_t)v));
 
 					if (sv_array[j].down) {




More information about the Bf-blender-cvs mailing list