Fix bug [#30863] Array Modifier Start and End Cap cause crash when the Cap Object has vertex group
Another crash with array caps, was caused by not making a deep enough copy of CD field. Also fixed the type of the 'mask' parameter, was int where it should be 64-bit.
This commit is contained in:
@@ -111,7 +111,7 @@ void CustomData_merge(const struct CustomData *source, struct CustomData *dest,
|
||||
* then goes through the mesh and makes sure all the customdata blocks are
|
||||
* consistent with the new layout.*/
|
||||
void CustomData_bmesh_merge(struct CustomData *source, struct CustomData *dest,
|
||||
int mask, int alloctype, struct BMesh *bm, const char htype);
|
||||
CustomDataMask mask, int alloctype, struct BMesh *bm, const char htype);
|
||||
|
||||
/* frees data associated with a CustomData object (doesn't free the object
|
||||
* itself, though)
|
||||
|
||||
@@ -2156,13 +2156,18 @@ void CustomData_bmesh_init_pool(CustomData *data, int totelem, const char htype)
|
||||
}
|
||||
|
||||
void CustomData_bmesh_merge(CustomData *source, CustomData *dest,
|
||||
int mask, int alloctype, BMesh *bm, const char htype)
|
||||
CustomDataMask mask, int alloctype, BMesh *bm, const char htype)
|
||||
{
|
||||
BMHeader *h;
|
||||
BMIter iter;
|
||||
CustomData destold = *dest;
|
||||
CustomData destold;
|
||||
void *tmp;
|
||||
int t;
|
||||
|
||||
/* copy old layer description so that old data can be copied into
|
||||
the new allocation */
|
||||
destold = *dest;
|
||||
if (destold.layers) destold.layers = MEM_dupallocN(destold.layers);
|
||||
|
||||
CustomData_merge(source, dest, mask, alloctype, 0);
|
||||
dest->pool = NULL;
|
||||
@@ -2208,6 +2213,7 @@ void CustomData_bmesh_merge(CustomData *source, CustomData *dest,
|
||||
}
|
||||
|
||||
if (destold.pool) BLI_mempool_destroy(destold.pool);
|
||||
if (destold.layers) MEM_freeN(destold.layers);
|
||||
}
|
||||
|
||||
void CustomData_bmesh_free_block(CustomData *data, void **block)
|
||||
|
||||
Reference in New Issue
Block a user