diff --git a/mono-4.6.0-fix_gacutil.patch b/mono-4.6.0-fix_gacutil.patch new file mode 100644 index 0000000..f6ecde2 --- /dev/null +++ b/mono-4.6.0-fix_gacutil.patch @@ -0,0 +1,227 @@ +diff --git a/mono/metadata/appdomain.c b/mono/metadata/appdomain.c +index 9b73ccd..579b93a 100644 +--- a/mono/metadata/appdomain.c ++++ b/mono/metadata/appdomain.c +@@ -1927,20 +1927,6 @@ mono_domain_assembly_search (MonoAssemblyName *aname, + return NULL; + } + +-static gboolean +-prevent_running_reference_assembly (MonoAssembly *ass, MonoError *error) +-{ +- mono_error_init (error); +- gboolean refasm = mono_assembly_get_reference_assembly_attribute (ass, error); +- if (!is_ok (error)) +- return TRUE; +- if (refasm) { +- mono_error_set_bad_image (error, ass->image, "Could not load file or assembly or one of its dependencies. Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context.\n"); +- return TRUE; +- } +- return FALSE; +-} +- + MonoReflectionAssembly * + ves_icall_System_Reflection_Assembly_LoadFrom (MonoString *fname, MonoBoolean refOnly) + { +@@ -1949,40 +1935,37 @@ ves_icall_System_Reflection_Assembly_LoadFrom (MonoString *fname, MonoBoolean re + MonoDomain *domain = mono_domain_get (); + char *name, *filename; + MonoImageOpenStatus status = MONO_IMAGE_OK; +- MonoAssembly *ass = NULL; +- +- name = NULL; +- result = NULL; +- +- mono_error_init (&error); ++ MonoAssembly *ass; + + if (fname == NULL) { +- mono_error_set_argument_null (&error, "assemblyFile", ""); +- goto leave; ++ MonoException *exc = mono_get_exception_argument_null ("assemblyFile"); ++ mono_set_pending_exception (exc); ++ return NULL; + } + + name = filename = mono_string_to_utf8_checked (fname, &error); +- if (!is_ok (&error)) +- goto leave; ++ if (mono_error_set_pending_exception (&error)) ++ return NULL; + + ass = mono_assembly_open_full (filename, &status, refOnly); + + if (!ass) { ++ MonoException *exc; ++ + if (status == MONO_IMAGE_IMAGE_INVALID) +- mono_error_set_bad_image_name (&error, name, ""); ++ exc = mono_get_exception_bad_image_format2 (NULL, fname); + else +- mono_error_set_exception_instance (&error, mono_get_exception_file_not_found2 (NULL, fname)); +- goto leave; ++ exc = mono_get_exception_file_not_found2 (NULL, fname); ++ g_free (name); ++ mono_set_pending_exception (exc); ++ return NULL; + } + +- if (!refOnly && prevent_running_reference_assembly (ass, &error)) +- goto leave; ++ g_free (name); + + result = mono_assembly_get_object_checked (domain, ass, &error); +- +-leave: +- mono_error_set_pending_exception (&error); +- g_free (name); ++ if (!result) ++ mono_error_set_pending_exception (&error); + return result; + } + +@@ -2017,11 +2000,6 @@ ves_icall_System_AppDomain_LoadAssemblyRaw (MonoAppDomain *ad, + return NULL; + } + +- if (!refonly && prevent_running_reference_assembly (ass, &error)) { +- mono_error_set_pending_exception (&error); +- return NULL; +- } +- + refass = mono_assembly_get_object_checked (domain, ass, &error); + if (!refass) + mono_error_set_pending_exception (&error); +@@ -2039,7 +2017,7 @@ ves_icall_System_AppDomain_LoadAssembly (MonoAppDomain *ad, MonoString *assRef, + MonoAssembly *ass; + MonoAssemblyName aname; + MonoReflectionAssembly *refass = NULL; +- gchar *name = NULL; ++ gchar *name; + gboolean parsed; + + g_assert (assRef); +@@ -2048,13 +2026,16 @@ ves_icall_System_AppDomain_LoadAssembly (MonoAppDomain *ad, MonoString *assRef, + if (mono_error_set_pending_exception (&error)) + return NULL; + parsed = mono_assembly_name_parse (name, &aname); ++ g_free (name); + + if (!parsed) { + /* This is a parse error... */ + if (!refOnly) { + refass = mono_try_assembly_resolve (domain, assRef, NULL, refOnly, &error); +- if (!is_ok (&error)) +- goto leave; ++ if (!mono_error_ok (&error)) { ++ mono_error_set_pending_exception (&error); ++ return NULL; ++ } + } + return refass; + } +@@ -2066,31 +2047,25 @@ ves_icall_System_AppDomain_LoadAssembly (MonoAppDomain *ad, MonoString *assRef, + /* MS.NET doesn't seem to call the assembly resolve handler for refonly assemblies */ + if (!refOnly) { + refass = mono_try_assembly_resolve (domain, assRef, NULL, refOnly, &error); +- if (!is_ok (&error)) +- goto leave; ++ if (!mono_error_ok (&error)) { ++ mono_error_set_pending_exception (&error); ++ return NULL; ++ } + } + else + refass = NULL; +- if (!refass) +- goto leave; +- ass = refass->assembly; ++ if (!refass) { ++ return NULL; ++ } + } + +- if (!refOnly && prevent_running_reference_assembly (ass, &error)) +- goto leave; +- +- g_assert (ass); +- if (refass == NULL) { ++ if (refass == NULL) + refass = mono_assembly_get_object_checked (domain, ass, &error); +- if (!is_ok (&error)) +- goto leave; +- } +- +- MONO_OBJECT_SETREF (refass, evidence, evidence); + +-leave: +- g_free (name); +- mono_error_set_pending_exception (&error); ++ if (refass == NULL) ++ mono_error_set_pending_exception (&error); ++ else ++ MONO_OBJECT_SETREF (refass, evidence, evidence); + return refass; + } + +diff --git a/mono/metadata/assembly.c b/mono/metadata/assembly.c +index 7bd02ff..c1e88da 100644 +--- a/mono/metadata/assembly.c ++++ b/mono/metadata/assembly.c +@@ -1176,23 +1176,6 @@ mono_assembly_load_reference (MonoImage *image, int index) + aname.major, aname.minor, aname.build, aname.revision, + strlen ((char*)aname.public_key_token) == 0 ? "(none)" : (char*)aname.public_key_token, extra_msg); + g_free (extra_msg); +- +- } else if (!image->assembly->ref_only) { +- MonoError error; +- if (mono_assembly_get_reference_assembly_attribute (reference, &error)) { +- mono_trace (G_LOG_LEVEL_WARNING, MONO_TRACE_ASSEMBLY, "The following reference assembly assembly referenced from %s was not loaded. Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context:\n" +- " Assembly: %s (assemblyref_index=%d)\n" +- " Version: %d.%d.%d.%d\n" +- " Public Key: %s\n", +- image->name, aname.name, index, +- aname.major, aname.minor, aname.build, aname.revision, +- strlen ((char*)aname.public_key_token) == 0 ? "(none)" : (char*)aname.public_key_token); +- reference = NULL; /* don't load reference assemblies for execution */ +- } +- if (!is_ok (&error)) { +- reference = NULL; +- mono_error_cleanup (&error); +- } + } + + mono_assemblies_lock (); +diff --git a/mono/metadata/class.c b/mono/metadata/class.c +index 56e12ad..17da478 100644 +--- a/mono/metadata/class.c ++++ b/mono/metadata/class.c +@@ -5544,7 +5544,6 @@ mono_class_setup_parent (MonoClass *klass, MonoClass *parent) + /* set the parent to something useful and safe, but mark the type as broken */ + parent = mono_defaults.object_class; + mono_class_set_failure (klass, MONO_EXCEPTION_TYPE_LOAD, NULL); +- g_assert (parent); + } + + klass->parent = parent; +diff --git a/mono/metadata/domain.c b/mono/metadata/domain.c +index 93aced6..a3ba4a7 100644 +--- a/mono/metadata/domain.c ++++ b/mono/metadata/domain.c +@@ -807,16 +807,6 @@ mono_init_internal (const char *filename, const char *exe_filename, const char * + + mono_profiler_appdomain_name (domain, domain->friendly_name); + +- /* Have to do this quite late so that we at least have System.Object */ +- MonoError custom_attr_error; +- if (mono_assembly_get_reference_assembly_attribute (ass, &custom_attr_error)) { +- char *corlib_file = g_build_filename (mono_assembly_getrootdir (), "mono", current_runtime->framework_version, "mscorlib.dll", NULL); +- g_print ("Could not load file or assembly %s. Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context.", corlib_file); +- g_free (corlib_file); +- exit (1); +- } +- mono_error_assert_ok (&custom_attr_error); +- + return domain; + } + diff --git a/mono.spec b/mono.spec index 9a07831..3ba485c 100644 --- a/mono.spec +++ b/mono.spec @@ -16,7 +16,7 @@ Name: mono Version: 4.6.0 -Release: 6%{?dist} +Release: 7%{?dist} Summary: Cross-platform, Open Source, .NET development framework Group: Development/Languages @@ -33,6 +33,7 @@ Patch1: mono-4.2.1-ppc.patch Patch2: mono-4.3.2-find-provides.patch Patch3: mono-4.2-fix-winforms-trayicon.patch Patch4: mono-4.6.0-patch_arm_fast_tls.patch +Patch5: mono-4.6.0-fix_gacutil.patch BuildRequires: bison BuildRequires: gcc-c++ @@ -273,6 +274,7 @@ Development file for monodoc %patch2 -p1 %patch3 -p1 %patch4 -p1 +%patch5 -p1 # Add undeclared Arg sed -i "61a #define ARG_MAX _POSIX_ARG_MAX" mono/io-layer/wapi_glob.h @@ -769,6 +771,9 @@ rm -f %{buildroot}%{_libdir}/pkgconfig/cecil.pc %{_libdir}/pkgconfig/monodoc.pc %changelog +* Wed Sep 21 2016 Timotheus Pokorra - 4.6.0-7 +- include patch for gacutil as suggested by directhex + * Wed Sep 14 2016 Timotheus Pokorra - 4.6.0-6 - update to 4.6.0.245 Cycle 8 Stable