Author: kumpera
Date: 2007-12-31 13:35:12 -0500 (Mon, 31 Dec 2007)
New Revision: 92069

Modified:
   trunk/mono/mono/metadata/ChangeLog
   trunk/mono/mono/metadata/loader.c
   trunk/mono/mono/metadata/metadata.c
Log:
2007-12-31  Rodrigo Kumpera  <[EMAIL PROTECTED]>

        * metadata.c (mono_metadata_decode_row): Assert if index is bigger
        than the table row count. It's the resposibility of the caller to
        make the bounds check and raise the correct error.

        * metadata.c (mono_metadata_decode_row_col): Same.

        * loader.c (mono_get_method_from_token): perform bounds check
        on token for methoddef table.



Modified: trunk/mono/mono/metadata/ChangeLog
===================================================================
--- trunk/mono/mono/metadata/ChangeLog  2007-12-31 18:28:15 UTC (rev 92068)
+++ trunk/mono/mono/metadata/ChangeLog  2007-12-31 18:35:12 UTC (rev 92069)
@@ -1,3 +1,14 @@
+2007-12-31  Rodrigo Kumpera  <[EMAIL PROTECTED]>
+
+       * metadata.c (mono_metadata_decode_row): Assert if index is bigger
+       than the table row count. It's the resposibility of the caller to
+       make the bounds check and raise the correct error.
+
+       * metadata.c (mono_metadata_decode_row_col): Same.
+
+       * loader.c (mono_get_method_from_token): perform bounds check
+       on token for methoddef table.
+
 2007-12-29  Miguel de Icaza  <[EMAIL PROTECTED]>
 
        * icall.c

Modified: trunk/mono/mono/metadata/loader.c
===================================================================
--- trunk/mono/mono/metadata/loader.c   2007-12-31 18:28:15 UTC (rev 92068)
+++ trunk/mono/mono/metadata/loader.c   2007-12-31 18:35:12 UTC (rev 92069)
@@ -1340,6 +1340,11 @@
 
        if (used_context) *used_context = FALSE;
 
+       if (idx > image->tables [MONO_TABLE_METHOD].rows) {
+               mono_loader_set_error_bad_image (g_strdup ("Bad method 
token."));
+               return NULL;
+       }
+
        mono_metadata_decode_row (&image->tables [MONO_TABLE_METHOD], idx - 1, 
cols, 6);
 
        if ((cols [2] & METHOD_ATTRIBUTE_PINVOKE_IMPL) ||

Modified: trunk/mono/mono/metadata/metadata.c
===================================================================
--- trunk/mono/mono/metadata/metadata.c 2007-12-31 18:28:15 UTC (rev 92068)
+++ trunk/mono/mono/metadata/metadata.c 2007-12-31 18:35:12 UTC (rev 92069)
@@ -954,7 +954,10 @@
 {
        guint32 bitfield = t->size_bitfield;
        int i, count = mono_metadata_table_count (bitfield);
-       const char *data = t->base + idx * t->row_size;
+       const char *data;
+
+       g_assert (idx < t->rows);
+       data = t->base + idx * t->row_size;
        
        g_assert (res_size == count);
        
@@ -989,10 +992,12 @@
 {
        guint32 bitfield = t->size_bitfield;
        int i;
-       register const char *data = t->base + idx * t->row_size;
+       register const char *data; 
        register int n;
        
+       g_assert (idx < t->rows);
        g_assert (col < mono_metadata_table_count (bitfield));
+       data = t->base + idx * t->row_size;
 
        n = mono_metadata_table_size (bitfield, 0);
        for (i = 0; i < col; ++i) {

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to