[mini] Use mono_string_new_checked instead of mono_string_new
authorAleksey Kliger <aleksey@xamarin.com>
Tue, 2 May 2017 16:00:33 +0000 (12:00 -0400)
committerAleksey Kliger <aleksey@xamarin.com>
Thu, 4 May 2017 16:01:13 +0000 (12:01 -0400)
(mono-security-windows.c) (aot-compiler.c) (debugger-agent.c) (driver.c) (mini-exceptions.c)

mono/metadata/mono-security-windows.c
mono/mini/aot-compiler.c
mono/mini/debugger-agent.c
mono/mini/driver.c
mono/mini/mini-exceptions.c

index d6f269c6e946b25b5f9968512832f726981882b6..7a34c8a1a6186206251169b4a6e0602a3dfa0c98 100644 (file)
@@ -120,7 +120,7 @@ ves_icall_System_Security_Principal_WindowsIdentity_GetTokenName (gpointer token
                result = mono_string_new_utf16_checked (mono_domain_get (), uniname, size, &error);
        }
        else
-               result = mono_string_new (mono_domain_get (), "");
+               result = mono_string_new_checked (mono_domain_get (), "", &error);
 
        if (uniname)
                g_free (uniname);
index c18f91c9749b6f76e74396ae1d793ac381c416e6..385a4d43dd1622f6ab21ae5f344c0fa4457ced88 100644 (file)
@@ -7931,7 +7931,9 @@ compile_thread_main (gpointer user_data)
 
        MonoError error;
        MonoInternalThread *internal = mono_thread_internal_current ();
-       mono_thread_set_name_internal (internal, mono_string_new (mono_domain_get (), "AOT compiler"), TRUE, FALSE, &error);
+       MonoString *str = mono_string_new_checked (mono_domain_get (), "AOT compiler", &error);
+       mono_error_assert_ok (&error);
+       mono_thread_set_name_internal (internal, str, TRUE, FALSE, &error);
        mono_error_assert_ok (&error);
 
        for (i = 0; i < methods->len; ++i)
index 839494f06f7766108d27c49b61a592c4ff165f43..c639fa9e756e5c095b0e73f81b1c78b94651d6a8 100644 (file)
@@ -7968,13 +7968,19 @@ domain_commands (int command, guint8 *p, guint8 *end, Buffer *buf)
        case CMD_APPDOMAIN_CREATE_STRING: {
                char *s;
                MonoString *o;
+               MonoError error;
 
                domain = decode_domainid (p, &p, end, NULL, &err);
                if (err != ERR_NONE)
                        return err;
                s = decode_string (p, &p, end);
 
-               o = mono_string_new (domain, s);
+               o = mono_string_new_checked (domain, s, &error);
+               if (!is_ok (&error)) {
+                       DEBUG_PRINTF (1, "[dbg] Failed to allocate String object '%s': %s\n", s, mono_error_get_message (&error));
+                       mono_error_cleanup (&error);
+                       return ERR_INVALID_OBJECT;
+               }
                buffer_add_objid (buf, (MonoObject*)o);
                break;
        }
@@ -10141,7 +10147,9 @@ debugger_thread (void *arg)
        debugger_thread_id = mono_native_thread_id_get ();
 
        MonoInternalThread *internal = mono_thread_internal_current ();
-       mono_thread_set_name_internal (internal, mono_string_new (mono_domain_get (), "Debugger agent"), TRUE, FALSE, &error);
+       MonoString *str = mono_string_new_checked (mono_domain_get (), "Debugger agent", &error);
+       mono_error_assert_ok (&error);
+       mono_thread_set_name_internal (internal, str, TRUE, FALSE, &error);
        mono_error_assert_ok (&error);
 
        internal->state |= ThreadState_Background;
index 43aa7219f2311f86aca7307dd2f8a5004ae88210..8719a12994c8e3fa936f5c34277412141aa72953 100644 (file)
@@ -1156,8 +1156,11 @@ load_agent (MonoDomain *domain, char *desc)
 
        if (args) {
                main_args = (MonoArray*)mono_array_new_checked (domain, mono_defaults.string_class, 1, &error);
-               if (main_args)
-                       mono_array_set (main_args, MonoString*, 0, mono_string_new (domain, args));
+               if (main_args) {
+                       MonoString *str = mono_string_new_checked (domain, args, &error);
+                       if (str)
+                               mono_array_set (main_args, MonoString*, 0, str);
+               }
        } else {
                main_args = (MonoArray*)mono_array_new_checked (domain, mono_defaults.string_class, 0, &error);
        }
index 90d85b88ab41d1127f82f118f2e1b0995858bb3e..8ba8b98d78ca3b91d6bdaffc92ed6adf2ed1d566 100644 (file)
@@ -893,8 +893,13 @@ ves_icall_get_trace (MonoException *exc, gint32 skip, MonoBoolean need_file_info
 
                        sf->method = NULL;
                        s = mono_method_get_name_full (method, TRUE, FALSE, MONO_TYPE_NAME_FORMAT_REFLECTION);
-                       MONO_OBJECT_SETREF (sf, internal_method_name, mono_string_new (domain, s));
+                       MonoString *name = mono_string_new_checked (domain, s, &error);
                        g_free (s);
+                       if (!is_ok (&error)) {
+                               mono_error_set_pending_exception (&error);
+                               return NULL;
+                       }
+                       MONO_OBJECT_SETREF (sf, internal_method_name, name);
                }
                else {
                        MonoReflectionMethod *rm = mono_method_get_object_checked (domain, method, NULL, &error);
@@ -927,7 +932,12 @@ ves_icall_get_trace (MonoException *exc, gint32 skip, MonoBoolean need_file_info
 
                if (need_file_info) {
                        if (location && location->source_file) {
-                               MONO_OBJECT_SETREF (sf, filename, mono_string_new (domain, location->source_file));
+                               MonoString *filename = mono_string_new_checked (domain, location->source_file, &error);
+                               if (!is_ok (&error)) {
+                                       mono_error_set_pending_exception (&error);
+                                       return NULL;
+                               }
+                               MONO_OBJECT_SETREF (sf, filename, filename);
                                sf->line = location->row;
                                sf->column = location->column;
                        } else {
@@ -1259,7 +1269,12 @@ ves_icall_get_frame_info (gint32 skip, MonoBoolean need_file_info,
 
        if (need_file_info) {
                if (location) {
-                       mono_gc_wbarrier_generic_store (file, (MonoObject*) mono_string_new (domain, location->source_file));
+                       MonoString *filename = mono_string_new_checked (domain, location->source_file, &error);
+                       if (!is_ok (&error)) {
+                               mono_error_set_pending_exception (&error);
+                               return FALSE;
+                       }
+                       mono_gc_wbarrier_generic_store (file, (MonoObject*)filename);
                        *line = location->row;
                        *column = location->column;
                } else {
@@ -1770,7 +1785,9 @@ mono_handle_exception_internal (MonoContext *ctx, MonoObject *obj, gboolean resu
        g_assert (ctx != NULL);
        if (!obj) {
                MonoException *ex = mono_get_exception_null_reference ();
-               MONO_OBJECT_SETREF (ex, message, mono_string_new (domain, "Object reference not set to an instance of an object"));
+               MonoString *msg = mono_string_new_checked (domain, "Object reference not set to an instance of an object", &error);
+               mono_error_assert_ok (&error);
+               MONO_OBJECT_SETREF (ex, message, msg);
                obj = (MonoObject *)ex;
        } 
 
@@ -1815,18 +1832,26 @@ mono_handle_exception_internal (MonoContext *ctx, MonoObject *obj, gboolean resu
                        char *from_name = mono_type_get_full_name (jit_tls->class_cast_from);
                        char *to_name = mono_type_get_full_name (jit_tls->class_cast_to);
                        char *msg = g_strdup_printf ("Unable to cast object of type '%s' to type '%s'.", from_name, to_name);
-                       mono_ex->message = mono_string_new (domain, msg);
+                       mono_ex->message = mono_string_new_checked (domain, msg, &error);
                        g_free (from_name);
                        g_free (to_name);
+                       if (!is_ok (&error)) {
+                               mono_runtime_printf_err ("Error creating class cast exception message '%s'\n", msg);
+                               mono_error_assert_ok (&error);
+                       }
                        g_free (msg);
                }
                if (!strcmp (mono_ex->object.vtable->klass->name, "ArrayTypeMismatchException")) {
                        char *from_name = mono_type_get_full_name (jit_tls->class_cast_from);
                        char *to_name = mono_type_get_full_name (jit_tls->class_cast_to);
                        char *msg = g_strdup_printf ("Source array of type '%s' cannot be cast to destination array type '%s'.", from_name, to_name);
-                       mono_ex->message = mono_string_new (domain, msg);
+                       mono_ex->message = mono_string_new_checked (domain, msg, &error);
                        g_free (from_name);
                        g_free (to_name);
+                       if (!is_ok (&error)) {
+                               mono_runtime_printf_err ("Error creating array type mismatch exception message '%s'\n", msg);
+                               mono_error_assert_ok (&error);
+                       }
                        g_free (msg);
                }
        }