explicit_size = mono_metadata_packing_from_typedef (class->image, class->type_token, &packing_size, &real_size);
if (explicit_size) {
- g_assert ((packing_size & 0xfffffff0) == 0);
+ if ((packing_size & 0xfffffff0) != 0) {
+ char *err_msg = g_strdup_printf ("Could not load struct '%s' with packing size %d >= 16", class->name, packing_size);
+ mono_class_set_failure (class, MONO_EXCEPTION_TYPE_LOAD, err_msg);
+ return;
+ }
class->packing_size = packing_size;
real_size += class->instance_size;
}
mono_error_init (error);
if (tb->class_size) {
- g_assert ((tb->packing_size & 0xfffffff0) == 0);
+ if ((tb->packing_size & 0xfffffff0) != 0) {
+ char *err_msg = g_strdup_printf ("Could not load struct '%s' with packing size %d >= 16", klass->name, tb->packing_size);
+ mono_class_set_failure (klass, MONO_EXCEPTION_TYPE_LOAD, err_msg);
+ return;
+ }
klass->packing_size = tb->packing_size;
real_size = klass->instance_size + tb->class_size;
}