*
* Copyright 2009-2010 Novell, Inc.
* Copyright 2011 Xamarin Inc.
+ * Licensed under the MIT license. See LICENSE file in the project root for full license information.
*/
#include <config.h>
} else if (type == VALUE_TYPE_ID_NULL) {
*(MonoObject**)addr = NULL;
} else if (type == MONO_TYPE_VALUETYPE) {
+ MonoError error;
guint8 *buf2;
gboolean is_enum;
MonoClass *klass;
g_free (vtype_buf);
return err;
}
- *(MonoObject**)addr = mono_value_box (d, klass, vtype_buf);
+ *(MonoObject**)addr = mono_value_box_checked (d, klass, vtype_buf, &error);
+ mono_error_cleanup (&error);
g_free (vtype_buf);
} else {
char *name = mono_type_full_name (t);
static ErrorCode
decode_value (MonoType *t, MonoDomain *domain, guint8 *addr, guint8 *buf, guint8 **endbuf, guint8 *limit)
{
+ MonoError error;
ErrorCode err;
int type = decode_byte (buf, &buf, limit);
g_free (nullable_buf);
return err;
}
- mono_nullable_init (addr, mono_value_box (domain, mono_class_from_mono_type (targ), nullable_buf), mono_class_from_mono_type (t));
+ MonoObject *boxed = mono_value_box_checked (domain, mono_class_from_mono_type (targ), nullable_buf, &error);
+ if (!is_ok (&error)) {
+ mono_error_cleanup (&error);
+ return ERR_INVALID_OBJECT;
+ }
+ mono_nullable_init (addr, boxed, mono_class_from_mono_type (t));
g_free (nullable_buf);
*endbuf = buf;
return ERR_NONE;
ass = (MonoAssembly *)tmp->data;
if (ass->image) {
+ MonoError error;
type_resolve = TRUE;
- t = mono_reflection_get_type (ass->image, &info, ignore_case, &type_resolve);
+ /* FIXME really okay to call while holding locks? */
+ t = mono_reflection_get_type_checked (ass->image, &info, ignore_case, &type_resolve, &error);
+ mono_error_cleanup (&error);
if (t) {
g_ptr_array_add (res_classes, mono_type_get_class (t));
g_ptr_array_add (res_domains, domain);
break;
}
case CMD_ASSEMBLY_GET_TYPE: {
+ MonoError error;
char *s = decode_string (p, &p, end);
gboolean ignorecase = decode_byte (p, &p, end);
MonoTypeNameParse info;
} else {
if (info.assembly.name)
NOT_IMPLEMENTED;
- t = mono_reflection_get_type (ass->image, &info, ignorecase, &type_resolve);
+ t = mono_reflection_get_type_checked (ass->image, &info, ignorecase, &type_resolve, &error);
+ if (!is_ok (&error)) {
+ mono_error_cleanup (&error); /* FIXME don't swallow the error */
+ mono_reflection_free_type_info (&info);
+ g_free (s);
+ return ERR_INVALID_ARGUMENT;
+ }
}
buffer_add_typeid (buf, domain, t ? mono_class_from_mono_type (t) : NULL);
mono_reflection_free_type_info (&info);