From 934a2a3c682add0f4824bf66e7e549854db2db23 Mon Sep 17 00:00:00 2001 From: Rodrigo Kumpera Date: Fri, 27 Mar 2009 22:48:12 +0000 Subject: [PATCH] 2009-03-27 Rodrigo Kumpera * metadata-verify.c: Verify heap sizes and size to decode row counts. svn path=/trunk/mono/; revision=130441 --- mono/metadata/ChangeLog | 4 ++++ mono/metadata/metadata-verify.c | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/mono/metadata/ChangeLog b/mono/metadata/ChangeLog index eb8f53f9a8c..20cc0713a7a 100644 --- a/mono/metadata/ChangeLog +++ b/mono/metadata/ChangeLog @@ -1,3 +1,7 @@ +2009-03-27 Rodrigo Kumpera + + * metadata-verify.c: Verify heap sizes and size to decode row counts. + 2009-03-27 Gonzalo Paniagua Javier * appdomain.c: diff --git a/mono/metadata/metadata-verify.c b/mono/metadata/metadata-verify.c index abf886acf59..0dd4611918d 100644 --- a/mono/metadata/metadata-verify.c +++ b/mono/metadata/metadata-verify.c @@ -82,6 +82,7 @@ typedef struct { int valid; guint32 section_count; SectionHeader *sections; + gboolean wide_strings, wide_guid, wide_blob; DataDirectory data_directories [16]; OffsetAndSize metadata_streams [5]; //offset from begin of the image @@ -591,6 +592,13 @@ verify_tables_schema (VerifyContext *ctx) if (ptr [5] != 0) ADD_ERROR (ctx, g_strdup_printf ("Invalid table schemata minor version %d, expected 0", ptr [5])); + if ((ptr [6] & ~0x7) != 0) + ADD_ERROR (ctx, g_strdup_printf ("Invalid table schemata heap sizes 0x%02x, only bits 0, 1 and 2 can be set", ((unsigned char *) ptr) [6])); + + ctx->wide_strings = ptr [6] & 0x1; + ctx->wide_guid = ptr [6] & 0x2; + ctx->wide_blob = ptr [6] & 04; + valid_tables = read64 (ptr + 8); count = 0; for (i = 0; i < 64; ++i) { @@ -606,6 +614,10 @@ verify_tables_schema (VerifyContext *ctx) ADD_ERROR (ctx, g_strdup_printf ("Invalid table %x", i)); ++count; } + + if (tables_area.size < 24 + count * 4) + ADD_ERROR (ctx, g_strdup_printf ("Table schemata size (%d) too small to for decoding row counts (requires %d bytes)", tables_area.size, 24 + count * 4)); + } -- 2.25.1