Fix object copying not ensuring validity of material arrays.
authorBastien Montagne <montagne29@wanadoo.fr>
Tue, 14 Aug 2018 11:35:51 +0000 (13:35 +0200)
committerBastien Montagne <montagne29@wanadoo.fr>
Tue, 14 Aug 2018 12:06:42 +0000 (14:06 +0200)
Related to T56363, this is not fixing the root of the bug, but ID
copying should always be a good occasion to ensure sanity of our data
(and error checking is always better than a crash!).

source/blender/blenkernel/intern/object.c

index 86326655cfeb92dbc1796cdb8f48b5d88d59773a..0cf2993133cca8fbd173fc2a0752fe33b9f97f07 100644 (file)
@@ -1124,6 +1124,12 @@ void BKE_object_copy_data(Main *UNUSED(bmain), Object *ob_dst, const Object *ob_
                ob_dst->matbits = MEM_dupallocN(ob_src->matbits);
                ob_dst->totcol = ob_src->totcol;
        }
+       else if (ob_dst->mat != NULL || ob_dst->matbits != NULL) {
+               /* This shall not be needed, but better be safe than sorry. */
+               BLI_assert(!"Object copy: non-NULL material pointers with zero counter, should not happen.");
+               ob_dst->mat = NULL;
+               ob_dst->matbits = NULL;
+       }
 
        if (ob_src->iuser) ob_dst->iuser = MEM_dupallocN(ob_src->iuser);