From 027609046ea2c6277586df5d620ffecb68bba020 Mon Sep 17 00:00:00 2001 From: Rodrigo Kumpera Date: Thu, 11 Dec 2014 19:08:16 -0500 Subject: [PATCH] [runtime] Explicitly call mono_class_setup_methods to fail types with bad methods. --- mono/metadata/icall.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mono/metadata/icall.c b/mono/metadata/icall.c index 7e3afcdb29b..e1379d541fc 100644 --- a/mono/metadata/icall.c +++ b/mono/metadata/icall.c @@ -3500,6 +3500,7 @@ mono_class_get_methods_by_name (MonoClass *klass, const char *name, guint32 bfla return array; } + mono_class_setup_methods (klass); mono_class_setup_vtable (klass); if (klass->exception_type != MONO_EXCEPTION_NONE || mono_loader_get_last_error ()) goto loader_error; @@ -3515,6 +3516,7 @@ mono_class_get_methods_by_name (MonoClass *klass, const char *name, guint32 bfla memset (method_slots, 0, sizeof (method_slots_default)); } handle_parent: + mono_class_setup_methods (klass); mono_class_setup_vtable (klass); if (klass->exception_type != MONO_EXCEPTION_NONE || mono_loader_get_last_error ()) goto loader_error; @@ -3655,6 +3657,11 @@ ves_icall_Type_GetConstructors_internal (MonoReflectionType *type, guint32 bflag System_Reflection_ConstructorInfo = mono_class_from_name ( mono_defaults.corlib, "System.Reflection", "ConstructorInfo"); + mono_class_setup_methods (klass); + if (klass->exception_type != MONO_EXCEPTION_NONE) + mono_raise_exception (mono_class_get_exception_for_failure (klass)); + + iter = NULL; while ((method = mono_class_get_methods (klass, &iter))) { match = 0; @@ -3765,6 +3772,7 @@ ves_icall_Type_GetPropertiesByName (MonoReflectionType *type, MonoString *name, properties = g_hash_table_new (property_hash, (GEqualFunc)property_equal); handle_parent: + mono_class_setup_methods (klass); mono_class_setup_vtable (klass); if (klass->exception_type != MONO_EXCEPTION_NONE || mono_loader_get_last_error ()) goto loader_error; @@ -3964,6 +3972,7 @@ ves_icall_Type_GetEvents_internal (MonoReflectionType *type, guint32 bflags, Mon events = g_hash_table_new (event_hash, (GEqualFunc)event_equal); handle_parent: + mono_class_setup_methods (klass); mono_class_setup_vtable (klass); if (klass->exception_type != MONO_EXCEPTION_NONE || mono_loader_get_last_error ()) goto loader_error; -- 2.11.4.GIT