Merge pull request #3040 from xmcclure/debugger-step-recursive
[mono.git] / mono / metadata / image.c
index fbbf58f6b3ea541d87a28fd78b583fa492585bbb..c58c4b6794a056cdcec340a869748af3bb66bfa0 100644 (file)
@@ -9,6 +9,7 @@
  * Copyright 2001-2003 Ximian, Inc (http://www.ximian.com)
  * Copyright 2004-2009 Novell, Inc (http://www.novell.com)
  *
+ * Licensed under the MIT license. See LICENSE file in the project root for full license information.
  */
 #include <config.h>
 #include <stdio.h>
@@ -509,9 +510,19 @@ load_metadata_ptrs (MonoImage *image, MonoCLIImageInfo *iinfo)
 
        i = ((MonoImageLoader*)image->loader)->load_tables (image);
        g_assert (image->heap_guid.data);
-       g_assert (image->heap_guid.size >= 16);
 
-       image->guid = mono_guid_to_string ((guint8*)image->heap_guid.data);
+       if (!image->metadata_only) {
+               g_assert (image->heap_guid.size >= 16);
+
+               image->guid = mono_guid_to_string ((guint8*)image->heap_guid.data);
+       } else {
+               /* PPDB files have no guid */
+               guint8 empty_guid [16];
+
+               memset (empty_guid, 0, sizeof (empty_guid));
+
+               image->guid = mono_guid_to_string (empty_guid);
+       }
 
        return i;
 }
@@ -1046,7 +1057,8 @@ do_mono_image_load (MonoImage *image, MonoImageOpenStatus *status,
                        }
                }
                if (!image->loader) {
-                       *status = MONO_IMAGE_IMAGE_INVALID;
+                       if (status)
+                               *status = MONO_IMAGE_IMAGE_INVALID;
                        goto invalid_image;
                }
 
@@ -1069,13 +1081,13 @@ do_mono_image_load (MonoImage *image, MonoImageOpenStatus *status,
                goto done;
        }
 
-       if (image->loader == &pe_loader && !mono_verifier_verify_cli_data (image, &errors))
+       if (image->loader == &pe_loader && !image->metadata_only && !mono_verifier_verify_cli_data (image, &errors))
                goto invalid_image;
 
        if (!mono_image_load_cli_data (image))
                goto invalid_image;
 
-       if (image->loader == &pe_loader && !mono_verifier_verify_table_data (image, &errors))
+       if (image->loader == &pe_loader && !image->metadata_only && !mono_verifier_verify_table_data (image, &errors))
                goto invalid_image;
 
        mono_image_load_names (image);
@@ -1288,6 +1300,7 @@ mono_image_open_from_data_internal (char *data, guint32 data_len, gboolean need_
        image->image_info = iinfo;
        image->ref_only = refonly;
        image->metadata_only = metadata_only;
+       image->ref_count = 1;
 
        image = do_mono_image_load (image, status, TRUE, TRUE);
        if (image == NULL)