Merge pull request #266 from joncham/bug-struct-pack-size
authorZoltan Varga <vargaz@gmail.com>
Thu, 29 Mar 2012 17:13:16 +0000 (10:13 -0700)
committerZoltan Varga <vargaz@gmail.com>
Thu, 29 Mar 2012 17:13:16 +0000 (10:13 -0700)
Raise TypeLoadException for invalid StructLayout Pack size rather than a...

mono/metadata/class.c
mono/metadata/reflection.c

index e62882017bba675e6740074f7dba6e6f661de015..71e0d722a03c0a9835e696076b6909a118c8862b 100644 (file)
@@ -1388,7 +1388,11 @@ mono_class_setup_fields (MonoClass *class)
        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;
        }
index 664d6f90b55ed11c6900823e2ecd97f467f1802c..373e0f5ead8d5af28c4aea8b1d044ef833d13769 100644 (file)
@@ -10927,7 +10927,11 @@ typebuilder_setup_fields (MonoClass *klass, MonoError *error)
        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;
        }