[runtime] MonoError-ize mono_array_new
[mono.git] / mono / metadata / reflection.c
index 61a8a597d407c0722d61299cc1f83d1980b0435c..5e2adacea5e8a0a3f81ba2b297a2bb1759e4a68c 100644 (file)
@@ -9165,7 +9165,8 @@ handle_type:
                        *end = p;
                        return NULL;
                }
-               arr = mono_array_new (mono_domain_get(), tklass, alen);
+               arr = mono_array_new_checked (mono_domain_get(), tklass, alen, error);
+               return_val_if_nok (error, NULL);
                basetype = tklass->byval_arg.type;
                if (basetype == MONO_TYPE_VALUETYPE && tklass->enumtype)
                        basetype = mono_class_enum_basetype (tklass)->type;
@@ -9531,9 +9532,13 @@ create_custom_attr (MonoImage *image, MonoMethod *method, const guchar *data, gu
                        }
 
 
-                       mono_property_set_value (prop, attr, pparams, NULL);
+                       mono_property_set_value_checked (prop, attr, pparams, error);
                        if (!type_is_reference (prop_type))
                                g_free (pparams [0]);
+                       if (!is_ok (error)) {
+                               g_free (name);
+                               goto fail;
+                       }
                }
                g_free (name);
        }
@@ -9587,8 +9592,9 @@ mono_reflection_create_custom_attr_data_args (MonoImage *image, MonoMethod *meth
        if (len < 2 || read16 (p) != 0x0001) /* Prolog */
                return;
 
-       typedargs = mono_array_new (domain, mono_get_object_class (), mono_method_signature (method)->param_count);
-       
+       typedargs = mono_array_new_checked (domain, mono_get_object_class (), mono_method_signature (method)->param_count, error);
+       return_if_nok (error);
+
        /* skip prolog */
        p += 2;
        for (i = 0; i < mono_method_signature (method)->param_count; ++i) {
@@ -9601,7 +9607,8 @@ mono_reflection_create_custom_attr_data_args (MonoImage *image, MonoMethod *meth
 
        named = p;
        num_named = read16 (named);
-       namedargs = mono_array_new (domain, mono_get_object_class (), num_named);
+       namedargs = mono_array_new_checked (domain, mono_get_object_class (), num_named, error);
+       return_if_nok (error);
        named += 2;
        attrklass = method->klass;
 
@@ -9858,7 +9865,8 @@ mono_custom_attrs_data_construct (MonoCustomAttrInfo *cinfo, MonoError *error)
        int i;
        
        mono_error_init (error);
-       result = mono_array_new (mono_domain_get (), mono_defaults.customattribute_data_class, cinfo->num_attrs);
+       result = mono_array_new_checked (mono_domain_get (), mono_defaults.customattribute_data_class, cinfo->num_attrs, error);
+       return_val_if_nok (error, NULL);
        for (i = 0; i < cinfo->num_attrs; ++i) {
                attr = create_custom_attr_data (cinfo->image, &cinfo->attrs [i], error);
                return_val_if_nok (error, NULL);
@@ -10519,8 +10527,8 @@ mono_reflection_get_custom_attrs_data_checked (MonoObject *obj, MonoError *error
                if (!cinfo->cached)
                        mono_custom_attrs_free (cinfo);
                return_val_if_nok (error, NULL);
-       } else
-               result = mono_array_new (mono_domain_get (), mono_defaults.customattribute_data_class, 0);
+       } else 
+               result = mono_array_new_checked (mono_domain_get (), mono_defaults.customattribute_data_class, 0, error);
 
        return result;
 }
@@ -11390,7 +11398,9 @@ mono_reflection_get_custom_attrs_blob_checked (MonoReflectionAssembly *assembly,
 
        g_assert (p - buffer <= buflen);
        buflen = p - buffer;
-       result = mono_array_new (mono_domain_get (), mono_defaults.byte_class, buflen);
+       result = mono_array_new_checked (mono_domain_get (), mono_defaults.byte_class, buflen, error);
+       if (!is_ok (error))
+               goto leave;
        p = mono_array_addr (result, char, 0);
        memcpy (p, buffer, buflen);
 leave:
@@ -13479,7 +13489,8 @@ reflection_sighelper_get_signature_local (MonoReflectionSigHelper *sig, MonoErro
        }
 
        buflen = buf.p - buf.buf;
-       result = mono_array_new (mono_domain_get (), mono_defaults.byte_class, buflen);
+       result = mono_array_new_checked (mono_domain_get (), mono_defaults.byte_class, buflen, error);
+       if (!is_ok (error)) goto fail;
        memcpy (mono_array_addr (result, char, 0), buf.buf, buflen);
        sigbuffer_free (&buf);
        return result;
@@ -13522,7 +13533,8 @@ reflection_sighelper_get_signature_field (MonoReflectionSigHelper *sig, MonoErro
        }
 
        buflen = buf.p - buf.buf;
-       result = mono_array_new (mono_domain_get (), mono_defaults.byte_class, buflen);
+       result = mono_array_new_checked (mono_domain_get (), mono_defaults.byte_class, buflen, error);
+       if (!is_ok (error)) goto fail;
        memcpy (mono_array_addr (result, char, 0), buf.buf, buflen);
        sigbuffer_free (&buf);