[Bf-blender-cvs] [2e15618] master: Fix T50216: Missing checks caused data transfer segfault

Luca Rood noreply at git.blender.org
Sat Dec 17 02:55:04 CET 2016


Commit: 2e15618f498c5a64c012f559bbb95273e729999a
Author: Luca Rood
Date:   Sun Dec 11 20:10:01 2016 -0200
Branches: master
https://developer.blender.org/rB2e15618f498c5a64c012f559bbb95273e729999a

Fix T50216: Missing checks caused data transfer segfault

Data transfer was not checking if the required geometry existed, thus
causing a segfault when it didn't. This adds the required checks, and
reports errors if geometry is missing.

This also replaces instances of the words "polygon" and "loop" in error
messages with "face" and "corner" respectively, to be consistent with
the rest of the existing UI.

Reviewed By: mont29

Differential Revision: http://developer.blender.org/D2410

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

M	source/blender/blenkernel/intern/data_transfer.c

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

diff --git a/source/blender/blenkernel/intern/data_transfer.c b/source/blender/blenkernel/intern/data_transfer.c
index 839673c..3bc09c0 100644
--- a/source/blender/blenkernel/intern/data_transfer.c
+++ b/source/blender/blenkernel/intern/data_transfer.c
@@ -1205,6 +1205,18 @@ bool BKE_object_data_transfer_dm(
 					           "'Topology' mapping cannot be used in this case");
 					continue;
 				}
+				if ((map_vert_mode & MREMAP_USE_EDGE) && (dm_src->getNumEdges(dm_src) == 0)) {
+					BKE_report(reports, RPT_ERROR,
+					           "Source mesh doesn't have any edges, "
+					           "None of the 'Edge' mappings can be used in this case");
+					continue;
+				}
+				if ((map_vert_mode & MREMAP_USE_POLY) && (dm_src->getNumPolys(dm_src) == 0)) {
+					BKE_report(reports, RPT_ERROR,
+					           "Source mesh doesn't have any faces, "
+					           "None of the 'Face' mappings can be used in this case");
+					continue;
+				}
 				if (ELEM(0, num_verts_dst, num_verts_src)) {
 					BKE_report(reports, RPT_ERROR,
 					           "Source or destination meshes do not have any vertices, cannot transfer vertex data");
@@ -1253,6 +1265,12 @@ bool BKE_object_data_transfer_dm(
 					           "'Topology' mapping cannot be used in this case");
 					continue;
 				}
+				if ((map_edge_mode & MREMAP_USE_POLY) && (dm_src->getNumPolys(dm_src) == 0)) {
+					BKE_report(reports, RPT_ERROR,
+					           "Source mesh doesn't have any faces, "
+					           "None of the 'Face' mappings can be used in this case");
+					continue;
+				}
 				if (ELEM(0, num_edges_dst, num_edges_src)) {
 					BKE_report(reports, RPT_ERROR,
 					           "Source or destination meshes do not have any edges, cannot transfer edge data");
@@ -1312,9 +1330,15 @@ bool BKE_object_data_transfer_dm(
 					           "'Topology' mapping cannot be used in this case");
 					continue;
 				}
+				if ((map_loop_mode & MREMAP_USE_EDGE) && (dm_src->getNumEdges(dm_src) == 0)) {
+					BKE_report(reports, RPT_ERROR,
+					           "Source mesh doesn't have any edges, "
+					           "None of the 'Edge' mappings can be used in this case");
+					continue;
+				}
 				if (ELEM(0, num_loops_dst, num_loops_src)) {
 					BKE_report(reports, RPT_ERROR,
-					           "Source or destination meshes do not have any polygons, cannot transfer loop data");
+					           "Source or destination meshes do not have any faces, cannot transfer corner data");
 					continue;
 				}
 
@@ -1370,9 +1394,15 @@ bool BKE_object_data_transfer_dm(
 					           "'Topology' mapping cannot be used in this case");
 					continue;
 				}
+				if ((map_poly_mode & MREMAP_USE_EDGE) && (dm_src->getNumEdges(dm_src) == 0)) {
+					BKE_report(reports, RPT_ERROR,
+					           "Source mesh doesn't have any edges, "
+					           "None of the 'Edge' mappings can be used in this case");
+					continue;
+				}
 				if (ELEM(0, num_polys_dst, num_polys_src)) {
 					BKE_report(reports, RPT_ERROR,
-					           "Source or destination meshes do not have any polygons, cannot transfer poly data");
+					           "Source or destination meshes do not have any faces, cannot transfer face data");
 					continue;
 				}




More information about the Bf-blender-cvs mailing list