From 9cfa7eac24503376a9d646ff70f624731045f436 Mon Sep 17 00:00:00 2001 From: Aleksey Kliger Date: Fri, 20 Jan 2023 15:15:57 -0500 Subject: [PATCH] [loader] Set status on success Emebedders that call `mono_assembly_load_from_full` may observe a non-NULL return value and an uninitialized MonoImageOpenStatus, which may lead to incorrect diagnostics in code like: ``` MonoImageOpenStatus status; MonoAssembly *assembly = mono_assembly_load_from_full (image, name, status, refonly); if (!assembly || status != MONO_IMAGE_OK) { fprintf(stderr, "Failure due to: %s\n", mono_image_strerror (status)); abort(); } ``` Which will print `Failure due to: Internal error` Addresses https://github.com/xamarin/xamarin-android/issues/7658 --- src/mono/mono/metadata/assembly.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/mono/mono/metadata/assembly.c b/src/mono/mono/metadata/assembly.c index 790adfc2f80b2b..4142e3ce70ff81 100644 --- a/src/mono/mono/metadata/assembly.c +++ b/src/mono/mono/metadata/assembly.c @@ -2025,6 +2025,8 @@ mono_assembly_request_load_from (MonoImage *image, const char *fname, mono_image_fixup_vtable (image); #endif + *status = MONO_IMAGE_OK; + mono_assembly_invoke_load_hook_internal (req->alc, ass); MONO_PROFILER_RAISE (assembly_loaded, (ass));