From: Raja R Harinath Date: Thu, 16 Jul 2009 17:17:00 +0000 (-0000) Subject: * get.c (get_type): Make robust to invalid types. X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=b77fbbbf061a7901ae9bff7ec343ba6326fc0d31;p=mono.git * get.c (get_type): Make robust to invalid types. svn path=/trunk/mono/; revision=138066 --- diff --git a/mono/dis/ChangeLog b/mono/dis/ChangeLog index f02b3d60a83..7a292cc9247 100644 --- a/mono/dis/ChangeLog +++ b/mono/dis/ChangeLog @@ -1,3 +1,7 @@ +2009-07-16 Raja R Harinath + + * get.c (get_type): Make robust to invalid types. + 2009-07-16 Marek Habersack * main.c: added new --presources option which prints manifest diff --git a/mono/dis/get.c b/mono/dis/get.c index 8bdea71a173..0651772fc34 100644 --- a/mono/dis/get.c +++ b/mono/dis/get.c @@ -1308,7 +1308,24 @@ get_type (MonoImage *m, const char *ptr, char **result, gboolean is_def, MonoGen default: t = mono_metadata_parse_type_full (m, container, MONO_PARSE_TYPE, 0, start, &ptr); - *result = dis_stringify_type (m, t, is_def); + if (t) { + *result = dis_stringify_type (m, t, is_def); + } else { + GString *err = g_string_new ("@!#$$#!@"); + if (container) + t = mono_metadata_parse_type_full (m, NULL, MONO_PARSE_TYPE, 0, start, &ptr); + if (t) { + char *name = dis_stringify_type (m, t, is_def); + g_warning ("Encountered a generic type inappropriate for its context"); + g_string_append (err, " // "); + g_string_append (err, name); + g_free (name); + } else { + g_warning ("Encountered an invalid type"); + } + *result = g_string_free (err, FALSE); + } + break; }