From 6a9cd82c6964a5e09ba663ef6ef83437e115dd6d Mon Sep 17 00:00:00 2001 From: kumpera Date: Thu, 21 Jan 2010 14:28:24 +0000 Subject: [PATCH] 2010-01-21 Rodrigo Kumpera * metadata-verify.c (parse_generic_inst): Fail a type signature if it has a recursive reference to itself. Fixes #571863. git-svn-id: svn+ssh://mono-cvs.ximian.com/source/trunk/mono@149969 e3ebcda4-bce8-0310-ba0a-eca2169e7518 --- mono/metadata/ChangeLog | 7 +++++++ mono/metadata/metadata-verify.c | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/mono/metadata/ChangeLog b/mono/metadata/ChangeLog index a20e3af39..6a4fa880a 100644 --- a/mono/metadata/ChangeLog +++ b/mono/metadata/ChangeLog @@ -1,5 +1,12 @@ 2010-01-21 Rodrigo Kumpera + * metadata-verify.c (parse_generic_inst): Fail a type signature if it + has a recursive reference to itself. + + Fixes #571863. + +2010-01-21 Rodrigo Kumpera + * loader.c (mono_method_signature): Fix error message. 2010-01-21 Mark Probst diff --git a/mono/metadata/metadata-verify.c b/mono/metadata/metadata-verify.c index 0f99fbca3..e4ff0b7d5 100644 --- a/mono/metadata/metadata-verify.c +++ b/mono/metadata/metadata-verify.c @@ -1267,6 +1267,12 @@ parse_generic_inst (VerifyContext *ctx, const char **_ptr, const char *end) if (!is_valid_coded_index (ctx, TYPEDEF_OR_REF_DESC, token)) FAIL (ctx, g_strdup_printf ("GenericInst: invalid TypeDefOrRef token %x", token)); + if (ctx->token) { + if (mono_metadata_token_index (ctx->token) == get_coded_index_token (TYPEDEF_OR_REF_DESC, token) && + mono_metadata_token_table (ctx->token) == get_coded_index_table (TYPEDEF_OR_REF_DESC, token)) + FAIL (ctx, g_strdup_printf ("Type: Recurside generic instance specification (%x). A type signature can't reference itself", ctx->token)); + } + if (!safe_read_cint (count, ptr, end)) FAIL (ctx, g_strdup ("GenericInst: Not enough room for argument count")); -- 2.11.4.GIT