Commit: 4370f8ffbde44442855275204689cc9ff3596306
Author: Sergey Sharybin
Date:   Tue Oct 11 11:54:04 2016 +0200
Branches: master
https://developer.blender.org/rB4370f8ffbde44442855275204689cc9ff3596306

Fix T49623: Immediately crash trying to render attached file in Cycles

Original fix in this area was not really complete (but was the safest at
the release time). Now all the crazy configurations of slots going out
of sync should be handled here.

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

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

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

diff --git a/source/blender/blenkernel/intern/mesh.c 
b/source/blender/blenkernel/intern/mesh.c
index 2c6ed0d..446aef9 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -2368,14 +2368,9 @@ Mesh *BKE_mesh_new_from_object(
                        if (tmpcu->mat) {
                                for (i = tmpcu->totcol; i-- > 0; ) {
                                        /* are we an object material or data 
based? */
-                                       if (ob->matbits[i] && i >= ob->totcol) {
-                                               tmpmesh->mat[i] = NULL;
-                                       }
-                                       else {
-                                               tmpmesh->mat[i] = 
ob->matbits[i] ? ob->mat[i] : tmpcu->mat[i];
-                                       }
+                                       tmpmesh->mat[i] = 
give_current_material(ob, i + 1);
 
-                                       if ((ob->matbits[i] || 
do_mat_id_data_us)  && tmpmesh->mat[i]) {
+                                       if (((ob->matbits && ob->matbits[i]) || 
do_mat_id_data_us)  && tmpmesh->mat[i]) {
                                                
id_us_plus(&tmpmesh->mat[i]->id);
                                        }
                                }
@@ -2392,14 +2387,9 @@ Mesh *BKE_mesh_new_from_object(
                        if (tmpmb->mat) {
                                for (i = tmpmb->totcol; i-- > 0; ) {
                                        /* are we an object material or data 
based? */
-                                       if (ob->matbits[i] && i >= ob->totcol) {
-                                               tmpmesh->mat[i] = NULL;
-                                       }
-                                       else {
-                                               tmpmesh->mat[i] = 
ob->matbits[i] ? ob->mat[i] : tmpmb->mat[i];
-                                       }
+                                       tmpmesh->mat[i] = 
give_current_material(ob, i + 1);
 
-                                       if ((ob->matbits[i] || 
do_mat_id_data_us) && tmpmesh->mat[i]) {
+                                       if (((ob->matbits[i] && ob->matbits) || 
do_mat_id_data_us) && tmpmesh->mat[i]) {
                                                
id_us_plus(&tmpmesh->mat[i]->id);
                                        }
                                }
@@ -2417,14 +2407,9 @@ Mesh *BKE_mesh_new_from_object(
                                if (origmesh->mat) {
                                        for (i = origmesh->totcol; i-- > 0; ) {
                                                /* are we an object material or 
data based? */
-                                               if (ob->matbits[i] && i >= 
ob->totcol) {
-                                                       tmpmesh->mat[i] = NULL;
-                                               }
-                                               else {
-                                                       tmpmesh->mat[i] = 
ob->matbits[i] ? ob->mat[i] : origmesh->mat[i];
-                                               }
+                                               tmpmesh->mat[i] = 
give_current_material(ob, i + 1);
 
-                                               if ((ob->matbits[i] || 
do_mat_id_data_us)  && tmpmesh->mat[i]) {
+                                               if (((ob->matbits && 
ob->matbits[i]) || do_mat_id_data_us)  && tmpmesh->mat[i]) {
                                                        
id_us_plus(&tmpmesh->mat[i]->id);
                                                }
                                        }

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to