[loader] --enable-minimal=assembly_remapping implies no strict strong name checking
authorAleksey Kliger <aleksey@xamarin.com>
Wed, 26 Apr 2017 21:25:15 +0000 (17:25 -0400)
committerAleksey Kliger <aleksey@xamarin.com>
Wed, 26 Apr 2017 23:09:05 +0000 (19:09 -0400)
When strict strong name checking is enabled, Mono will check public key tokens
and versions match between a requested assembly reference and a candidate found
via its usual loading directories.

amend

configure.ac
mono/metadata/appdomain.c
mono/metadata/assembly.c

index 49ff006923b4396c36183c27e891717807631273..56e56c147e9def5b6fd1848906266770656403b6 100644 (file)
@@ -1173,6 +1173,8 @@ fi
 if test "x$mono_feature_disable_assembly_remapping" = "xyes"; then
        AC_DEFINE(DISABLE_ASSEMBLY_REMAPPING, 1, [Disable assembly remapping.])
        AC_MSG_NOTICE([Disabled Assembly remapping.])
+       AC_DEFINE(DISABLE_STRICT_STRONG_NAMES, 1, [Disable strict strong name checking.])
+       AC_MSG_NOTICE([Disabled strict strong name checking.])
 fi
 
 if test "x$mono_feature_disable_shared_perfcounters" = "xyes"; then
index 0d57ff8b745aed6f8a0b6ff50e96aea505bf19b4..5d02e33b69bd6c6d7ab7ff5b343a91d91c373495 100644 (file)
@@ -2002,6 +2002,12 @@ mono_domain_assembly_preload (MonoAssemblyName *aname,
 
        set_domain_search_path (domain);
 
+       MonoAssemblyCandidatePredicate predicate = NULL;
+       void* predicate_ud = NULL;
+#if !defined(DISABLE_STRICT_STRONG_NAMES)
+       predicate = &mono_assembly_candidate_predicate_sn_same_name;
+       predicate_ud = aname;
+#endif
        if (domain->search_path && domain->search_path [0] != NULL) {
                if (mono_trace_is_traced (G_LOG_LEVEL_DEBUG, MONO_TRACE_ASSEMBLY)) {
                        mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_ASSEMBLY, "Domain %s search path is:", domain->friendly_name);
@@ -2011,11 +2017,11 @@ mono_domain_assembly_preload (MonoAssemblyName *aname,
                        }
                        mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_ASSEMBLY, "End of domain %s search path.", domain->friendly_name);                    
                }
-               result = real_load (domain->search_path, aname->culture, aname->name, refonly, &mono_assembly_candidate_predicate_sn_same_name, aname);
+               result = real_load (domain->search_path, aname->culture, aname->name, refonly, predicate, predicate_ud);
        }
 
        if (result == NULL && assemblies_path && assemblies_path [0] != NULL) {
-               result = real_load (assemblies_path, aname->culture, aname->name, refonly, &mono_assembly_candidate_predicate_sn_same_name, aname);
+               result = real_load (assemblies_path, aname->culture, aname->name, refonly, predicate, predicate_ud);
        }
 
        return result;
index 93fbd89b7cb5c63ab770f96a9113bff6d831c129..dd76d79cca1dbdcdde559a62dbc66c2b2f3fa301 100644 (file)
@@ -3657,6 +3657,13 @@ mono_assembly_load_full_nosearch (MonoAssemblyName *aname,
                return mono_assembly_load_corlib (mono_get_runtime_info (), status);
        }
 
+       MonoAssemblyCandidatePredicate predicate = NULL;
+       void* predicate_ud = NULL;
+#if !defined(DISABLE_STRICT_STRONG_NAMES)
+       predicate = &mono_assembly_candidate_predicate_sn_same_name;
+       predicate_ud = aname;
+#endif
+
        len = strlen (aname->name);
        for (ext_index = 0; ext_index < 2; ext_index ++) {
                ext = ext_index == 0 ? ".dll" : ".exe";
@@ -3676,7 +3683,7 @@ mono_assembly_load_full_nosearch (MonoAssemblyName *aname,
 
                if (basedir) {
                        fullpath = g_build_filename (basedir, filename, NULL);
-                       result = mono_assembly_open_predicate (fullpath, refonly, FALSE, &mono_assembly_candidate_predicate_sn_same_name, aname, status);
+                       result = mono_assembly_open_predicate (fullpath, refonly, FALSE, predicate, predicate_ud, status);
                        g_free (fullpath);
                        if (result) {
                                result->in_gac = FALSE;
@@ -3685,7 +3692,7 @@ mono_assembly_load_full_nosearch (MonoAssemblyName *aname,
                        }
                }
 
-               result = load_in_path (filename, default_path, status, refonly, &mono_assembly_candidate_predicate_sn_same_name, aname);
+               result = load_in_path (filename, default_path, status, refonly, predicate, predicate_ud);
                if (result)
                        result->in_gac = FALSE;
                g_free (filename);