[runtime] MonoError-ize mono_array_new_cached
[mono.git] / mono / metadata / reflection.c
index 5e2adacea5e8a0a3f81ba2b297a2bb1759e4a68c..1638cb1f76e4e5dbd79211740400b72585b2e6bd 100644 (file)
@@ -7868,11 +7868,17 @@ mono_method_body_get_object_checked (MonoDomain *domain, MonoMethod *method, Mon
        ret->init_locals = header->init_locals;
        ret->max_stack = header->max_stack;
        ret->local_var_sig_token = local_var_sig_token;
-       MONO_OBJECT_SETREF (ret, il, mono_array_new_cached (domain, mono_defaults.byte_class, header->code_size));
+       MonoArray *il_arr = mono_array_new_cached (domain, mono_defaults.byte_class, header->code_size, error);
+       if (!is_ok (error))
+               goto fail;
+       MONO_OBJECT_SETREF (ret, il, il_arr);
        memcpy (mono_array_addr (ret->il, guint8, 0), header->code, header->code_size);
 
        /* Locals */
-       MONO_OBJECT_SETREF (ret, locals, mono_array_new_cached (domain, mono_class_get_local_variable_info_class (), header->num_locals));
+       MonoArray *locals_arr = mono_array_new_cached (domain, mono_class_get_local_variable_info_class (), header->num_locals, error);
+       if (!is_ok (error))
+               goto fail;
+       MONO_OBJECT_SETREF (ret, locals, locals_arr);
        for (i = 0; i < header->num_locals; ++i) {
                MonoReflectionLocalVariableInfo *info = (MonoReflectionLocalVariableInfo*)mono_object_new_checked (domain, mono_class_get_local_variable_info_class (), error);
                if (!is_ok (error))
@@ -7890,7 +7896,10 @@ mono_method_body_get_object_checked (MonoDomain *domain, MonoMethod *method, Mon
        }
 
        /* Exceptions */
-       MONO_OBJECT_SETREF (ret, clauses, mono_array_new_cached (domain, mono_class_get_exception_handling_clause_class (), header->num_clauses));
+       MonoArray *exn_clauses = mono_array_new_cached (domain, mono_class_get_exception_handling_clause_class (), header->num_clauses, error);
+       if (!is_ok (error))
+               goto fail;
+       MONO_OBJECT_SETREF (ret, clauses, exn_clauses);
        for (i = 0; i < header->num_clauses; ++i) {
                MonoReflectionExceptionHandlingClause *info = (MonoReflectionExceptionHandlingClause*)mono_object_new_checked (domain, mono_class_get_exception_handling_clause_class (), error);
                if (!is_ok (error))
@@ -9827,7 +9836,8 @@ mono_custom_attrs_construct_by_type (MonoCustomAttrInfo *cinfo, MonoClass *attr_
                        n ++;
        }
 
-       result = mono_array_new_cached (mono_domain_get (), mono_defaults.attribute_class, n);
+       result = mono_array_new_cached (mono_domain_get (), mono_defaults.attribute_class, n, error);
+       return_val_if_nok (error, NULL);
        n = 0;
        for (i = 0; i < cinfo->num_attrs; ++i) {
                if (!cinfo->attrs [i].ctor) {
@@ -10463,7 +10473,7 @@ mono_reflection_get_custom_attrs_by_type (MonoObject *obj, MonoClass *attr_klass
                if (!result)
                        return NULL;
        } else {
-               result = mono_array_new_cached (mono_domain_get (), mono_defaults.attribute_class, 0);
+               result = mono_array_new_cached (mono_domain_get (), mono_defaults.attribute_class, 0, error);
        }
 
        return result;