X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fexception.c;h=beece6709d74432af8e3a942362a6dcc9305986d;hb=HEAD;hp=de1e917dc8412cc6066f9bc6f8301aa0250c21e4;hpb=2099acf5f4a80c46bf4e75e9d67b8db4f2c86bbd;p=mono.git diff --git a/mono/metadata/exception.c b/mono/metadata/exception.c index de1e917dc84..beece6709d7 100644 --- a/mono/metadata/exception.c +++ b/mono/metadata/exception.c @@ -230,12 +230,16 @@ MonoException * mono_exception_from_name_msg (MonoImage *image, const char *name_space, const char *name, const char *msg) { + MonoError error; MonoException *ex; ex = mono_exception_from_name (image, name_space, name); - if (msg) - MONO_OBJECT_SETREF (ex, message, mono_string_new (mono_object_get_domain ((MonoObject*)ex), msg)); + if (msg) { + MonoString *msg_str = mono_string_new_checked (mono_object_get_domain ((MonoObject*)ex), msg, &error); + mono_error_assert_ok (&error); + MONO_OBJECT_SETREF (ex, message, msg_str); + } return ex; } @@ -430,9 +434,14 @@ mono_get_exception_array_type_mismatch () MonoException * mono_get_exception_type_load (MonoString *class_name, char *assembly_name) { - MonoString *s = assembly_name ? mono_string_new (mono_domain_get (), assembly_name) : mono_string_new (mono_domain_get (), ""); - MonoError error; + MonoString *s = NULL; + if (assembly_name) { + s = mono_string_new_checked (mono_domain_get (), assembly_name, &error); + mono_error_assert_ok (&error); + } else + s = mono_string_empty (mono_domain_get ()); + MonoException *ret = mono_exception_from_name_two_strings_checked (mono_get_corlib (), "System", "TypeLoadException", class_name, s, &error); mono_error_assert_ok (&error); @@ -470,10 +479,12 @@ mono_get_exception_not_supported (const char *msg) MonoException * mono_get_exception_missing_method (const char *class_name, const char *member_name) { - MonoString *s1 = mono_string_new (mono_domain_get (), class_name); - MonoString *s2 = mono_string_new (mono_domain_get (), member_name); - MonoError error; + MonoString *s1 = mono_string_new_checked (mono_domain_get (), class_name, &error); + mono_error_assert_ok (&error); + MonoString *s2 = mono_string_new_checked (mono_domain_get (), member_name, &error); + mono_error_assert_ok (&error); + MonoException *ret = mono_exception_from_name_two_strings_checked (mono_get_corlib (), "System", "MissingMethodException", s1, s2, &error); mono_error_assert_ok (&error); @@ -489,10 +500,12 @@ mono_get_exception_missing_method (const char *class_name, const char *member_na MonoException * mono_get_exception_missing_field (const char *class_name, const char *member_name) { - MonoString *s1 = mono_string_new (mono_domain_get (), class_name); - MonoString *s2 = mono_string_new (mono_domain_get (), member_name); - MonoError error; + MonoString *s1 = mono_string_new_checked (mono_domain_get (), class_name, &error); + mono_error_assert_ok (&error); + MonoString *s2 = mono_string_new_checked (mono_domain_get (), member_name, &error); + mono_error_assert_ok (&error); + MonoException *ret = mono_exception_from_name_two_strings_checked (mono_get_corlib (), "System", "MissingFieldException", s1, s2, &error); mono_error_assert_ok (&error); @@ -513,8 +526,11 @@ mono_get_exception_argument_null (const char *arg) mono_get_corlib (), "System", "ArgumentNullException"); if (arg) { + MonoError error; MonoArgumentException *argex = (MonoArgumentException *)ex; - MONO_OBJECT_SETREF (argex, param_name, mono_string_new (mono_object_get_domain ((MonoObject*)ex), arg)); + MonoString *arg_str = mono_string_new_checked (mono_object_get_domain ((MonoObject*)ex), arg, &error); + mono_error_assert_ok (&error); + MONO_OBJECT_SETREF (argex, param_name, arg_str); } return ex; @@ -534,8 +550,11 @@ mono_get_exception_argument (const char *arg, const char *msg) mono_get_corlib (), "System", "ArgumentException", msg); if (arg) { + MonoError error; MonoArgumentException *argex = (MonoArgumentException *)ex; - MONO_OBJECT_SETREF (argex, param_name, mono_string_new (mono_object_get_domain ((MonoObject*)ex), arg)); + MonoString *arg_str = mono_string_new_checked (mono_object_get_domain ((MonoObject*)ex), arg, &error); + mono_error_assert_ok (&error); + MONO_OBJECT_SETREF (argex, param_name, arg_str); } return ex; @@ -555,8 +574,11 @@ mono_get_exception_argument_out_of_range (const char *arg) mono_get_corlib (), "System", "ArgumentOutOfRangeException"); if (arg) { + MonoError error; MonoArgumentException *argex = (MonoArgumentException *)ex; - MONO_OBJECT_SETREF (argex, param_name, mono_string_new (mono_object_get_domain ((MonoObject*)ex), arg)); + MonoString *arg_str = mono_string_new_checked (mono_object_get_domain ((MonoObject*)ex), arg, &error); + mono_error_assert_ok (&error); + MONO_OBJECT_SETREF (argex, param_name, arg_str); } return ex; @@ -610,9 +632,13 @@ mono_get_exception_file_not_found (MonoString *fname) MonoException * mono_get_exception_file_not_found2 (const char *msg, MonoString *fname) { - MonoString *s = msg ? mono_string_new (mono_domain_get (), msg) : NULL; - MonoError error; + MonoString *s = NULL; + if (msg) { + s = mono_string_new_checked (mono_domain_get (), msg, &error); + mono_error_assert_ok (&error); + } + MonoException *ret = mono_exception_from_name_two_strings_checked ( mono_get_corlib (), "System.IO", "FileNotFoundException", s, fname, &error); mono_error_assert_ok (&error); @@ -647,6 +673,8 @@ mono_get_exception_type_initialization_checked (const gchar *type_name, MonoExce MonoMethod *method; gpointer iter; + error_init (error); + klass = mono_class_load_from_name (mono_get_corlib (), "System", "TypeInitializationException"); mono_class_init (klass); @@ -663,7 +691,9 @@ mono_get_exception_type_initialization_checked (const gchar *type_name, MonoExce } g_assert (method); - args [0] = mono_string_new (mono_domain_get (), type_name); + MonoString *type_name_str = mono_string_new_checked (mono_domain_get (), type_name, error); + mono_error_assert_ok (error); + args [0] = type_name_str; args [1] = inner; exc = mono_object_new_checked (mono_domain_get (), klass, error); @@ -727,9 +757,14 @@ mono_get_exception_bad_image_format (const char *msg) MonoException * mono_get_exception_bad_image_format2 (const char *msg, MonoString *fname) { - MonoString *s = msg ? mono_string_new (mono_domain_get (), msg) : NULL; - MonoError error; + MonoString *s = NULL; + + if (msg) { + s = mono_string_new_checked (mono_domain_get (), msg, &error); + mono_error_assert_ok (&error); + } + MonoException *ret = mono_exception_from_name_two_strings_checked ( mono_get_corlib (), "System", "BadImageFormatException", s, fname, &error); mono_error_assert_ok (&error);