From 7e305bf01c34fdfb3cb287fb7f15ac0db8e31e0c Mon Sep 17 00:00:00 2001 From: Zoltan Varga Date: Sun, 23 Jul 2017 22:12:03 -0400 Subject: [PATCH] [runtime] Fix the size calculation for CustomAttributeType coded indexes, they can only point to the MethodDef/MemberRef tables even through 3 bits are used to encode them, only 2 values are used. Fixes #58210. --- mono/metadata/metadata.c | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/mono/metadata/metadata.c b/mono/metadata/metadata.c index 133310e69216..651538c3c5cb 100644 --- a/mono/metadata/metadata.c +++ b/mono/metadata/metadata.c @@ -836,21 +836,11 @@ mono_metadata_compute_size (MonoImage *meta, int tableindex, guint32 *result_bit break; /* - * CustomAttributeType: TypeDef, TypeRef, MethodDef, - * MemberRef and String. + * CustomAttributeType: MethodDef, MemberRef. */ case MONO_MT_CAT_IDX: - /* String is a heap, if it is wide, we know the size */ - /* See above, nope. - if (meta->idx_string_wide){ - field_size = 4; - break; - }*/ - - n = MAX (get_nrows (meta, MONO_TABLE_TYPEREF), - get_nrows (meta, MONO_TABLE_TYPEDEF)); - n = MAX (n, get_nrows (meta, MONO_TABLE_METHOD)); - n = MAX (n, get_nrows (meta, MONO_TABLE_MEMBERREF)); + n = MAX (get_nrows (meta, MONO_TABLE_METHOD), + get_nrows (meta, MONO_TABLE_MEMBERREF)); /* 3 bits to encode */ field_size = rtsize (meta, n, 16-3);