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:
Nicholas Bishop
2012-04-09 02:14:55 +00:00
parent bcd6c84a66
commit b7113002db
2 changed files with 9 additions and 3 deletions

View File

@@ -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)

View File

@@ -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)