From 5713beacf9b8191fd2700d274ba3469f9e1c9adc Mon Sep 17 00:00:00 2001 From: Jan Kotas Date: Thu, 16 Jun 2022 14:51:46 -0700 Subject: [PATCH] Fix corerun for assemblies with mismatched filename (#70800) corerun gracefully handled filename not matching the assembly name. Handling of this case regressed in #68186. This change is fixing the regression. Fixes #68455 --- src/coreclr/binder/assemblybindercommon.cpp | 3 ++- src/coreclr/binder/customassemblybinder.cpp | 3 ++- src/coreclr/binder/defaultassemblybinder.cpp | 3 ++- src/coreclr/binder/inc/assemblybindercommon.hpp | 1 + src/coreclr/binder/inc/customassemblybinder.h | 1 + src/coreclr/binder/inc/defaultassemblybinder.h | 1 + src/coreclr/vm/assemblybinder.h | 2 +- src/coreclr/vm/assemblynative.cpp | 4 ++-- src/coreclr/vm/assemblynative.hpp | 2 +- src/coreclr/vm/assemblyspec.cpp | 2 +- 10 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/coreclr/binder/assemblybindercommon.cpp b/src/coreclr/binder/assemblybindercommon.cpp index b3edff82d7c..e23c00dfc25 100644 --- a/src/coreclr/binder/assemblybindercommon.cpp +++ b/src/coreclr/binder/assemblybindercommon.cpp @@ -1180,6 +1180,7 @@ HRESULT AssemblyBinderCommon::BindUsingHostAssemblyResolver(/* in */ INT_PTR pMa HRESULT AssemblyBinderCommon::BindUsingPEImage(/* in */ AssemblyBinder* pBinder, /* in */ BINDER_SPACE::AssemblyName *pAssemblyName, /* in */ PEImage *pPEImage, + /* in */ bool excludeAppPaths, /* [retval] [out] */ Assembly **ppAssembly) { HRESULT hr = E_FAIL; @@ -1208,7 +1209,7 @@ Retry: pAssemblyName, true, // skipFailureCaching true, // skipVersionCompatibilityCheck - false, // excludeAppPaths + excludeAppPaths, // excludeAppPaths &bindResult); if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) diff --git a/src/coreclr/binder/customassemblybinder.cpp b/src/coreclr/binder/customassemblybinder.cpp index 98e0fd25de8..02a8d2e918d 100644 --- a/src/coreclr/binder/customassemblybinder.cpp +++ b/src/coreclr/binder/customassemblybinder.cpp @@ -102,6 +102,7 @@ Exit:; } HRESULT CustomAssemblyBinder::BindUsingPEImage( /* in */ PEImage *pPEImage, + /* in */ bool excludeAppPaths, /* [retval][out] */ BINDER_SPACE::Assembly **ppAssembly) { HRESULT hr = S_OK; @@ -128,7 +129,7 @@ HRESULT CustomAssemblyBinder::BindUsingPEImage( /* in */ PEImage *pPEImage, IF_FAIL_GO(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)); } - hr = AssemblyBinderCommon::BindUsingPEImage(this, pAssemblyName, pPEImage, &pCoreCLRFoundAssembly); + hr = AssemblyBinderCommon::BindUsingPEImage(this, pAssemblyName, pPEImage, excludeAppPaths, &pCoreCLRFoundAssembly); if (hr == S_OK) { _ASSERTE(pCoreCLRFoundAssembly != NULL); diff --git a/src/coreclr/binder/defaultassemblybinder.cpp b/src/coreclr/binder/defaultassemblybinder.cpp index 28157a11244..2461ca4b139 100644 --- a/src/coreclr/binder/defaultassemblybinder.cpp +++ b/src/coreclr/binder/defaultassemblybinder.cpp @@ -111,6 +111,7 @@ Exit:; #if !defined(DACCESS_COMPILE) HRESULT DefaultAssemblyBinder::BindUsingPEImage( /* in */ PEImage *pPEImage, + /* in */ bool excludeAppPaths, /* [retval][out] */ BINDER_SPACE::Assembly **ppAssembly) { HRESULT hr = S_OK; @@ -157,7 +158,7 @@ HRESULT DefaultAssemblyBinder::BindUsingPEImage( /* in */ PEImage *pPEImage, } } - hr = AssemblyBinderCommon::BindUsingPEImage(this, pAssemblyName, pPEImage, &pCoreCLRFoundAssembly); + hr = AssemblyBinderCommon::BindUsingPEImage(this, pAssemblyName, pPEImage, excludeAppPaths, &pCoreCLRFoundAssembly); if (hr == S_OK) { _ASSERTE(pCoreCLRFoundAssembly != NULL); diff --git a/src/coreclr/binder/inc/assemblybindercommon.hpp b/src/coreclr/binder/inc/assemblybindercommon.hpp index b3b21587159..3bd529bd9c0 100644 --- a/src/coreclr/binder/inc/assemblybindercommon.hpp +++ b/src/coreclr/binder/inc/assemblybindercommon.hpp @@ -56,6 +56,7 @@ namespace BINDER_SPACE static HRESULT BindUsingPEImage(/* in */ AssemblyBinder *pBinder, /* in */ BINDER_SPACE::AssemblyName *pAssemblyName, /* in */ PEImage *pPEImage, + /* in */ bool excludeAppPaths, /* [retval] [out] */ Assembly **ppAssembly); #endif // !defined(DACCESS_COMPILE) diff --git a/src/coreclr/binder/inc/customassemblybinder.h b/src/coreclr/binder/inc/customassemblybinder.h index 9d59832f3c9..7a89c5033b9 100644 --- a/src/coreclr/binder/inc/customassemblybinder.h +++ b/src/coreclr/binder/inc/customassemblybinder.h @@ -18,6 +18,7 @@ class CustomAssemblyBinder final : public AssemblyBinder public: HRESULT BindUsingPEImage(PEImage* pPEImage, + bool excludeAppPaths, BINDER_SPACE::Assembly** ppAssembly) override; HRESULT BindUsingAssemblyName(BINDER_SPACE::AssemblyName* pAssemblyName, diff --git a/src/coreclr/binder/inc/defaultassemblybinder.h b/src/coreclr/binder/inc/defaultassemblybinder.h index 398174c65a0..3d35854e09f 100644 --- a/src/coreclr/binder/inc/defaultassemblybinder.h +++ b/src/coreclr/binder/inc/defaultassemblybinder.h @@ -16,6 +16,7 @@ class DefaultAssemblyBinder final : public AssemblyBinder public: HRESULT BindUsingPEImage(PEImage* pPEImage, + bool excludeAppPaths, BINDER_SPACE::Assembly** ppAssembly) override; HRESULT BindUsingAssemblyName(BINDER_SPACE::AssemblyName* pAssemblyName, diff --git a/src/coreclr/vm/assemblybinder.h b/src/coreclr/vm/assemblybinder.h index 7137a46309d..259527cf186 100644 --- a/src/coreclr/vm/assemblybinder.h +++ b/src/coreclr/vm/assemblybinder.h @@ -19,7 +19,7 @@ class AssemblyBinder public: HRESULT BindAssemblyByName(AssemblyNameData* pAssemblyNameData, BINDER_SPACE::Assembly** ppAssembly); - virtual HRESULT BindUsingPEImage(PEImage* pPEImage, BINDER_SPACE::Assembly** ppAssembly) = 0; + virtual HRESULT BindUsingPEImage(PEImage* pPEImage, bool excludeAppPaths, BINDER_SPACE::Assembly** ppAssembly) = 0; virtual HRESULT BindUsingAssemblyName(BINDER_SPACE::AssemblyName* pAssemblyName, BINDER_SPACE::Assembly** ppAssembly) = 0; /// diff --git a/src/coreclr/vm/assemblynative.cpp b/src/coreclr/vm/assemblynative.cpp index a0879b0290c..cd0222b96b9 100644 --- a/src/coreclr/vm/assemblynative.cpp +++ b/src/coreclr/vm/assemblynative.cpp @@ -124,7 +124,7 @@ extern "C" void QCALLTYPE AssemblyNative_InternalLoad(NativeAssemblyNameParts* p } /* static */ -Assembly* AssemblyNative::LoadFromPEImage(AssemblyBinder* pBinder, PEImage *pImage) +Assembly* AssemblyNative::LoadFromPEImage(AssemblyBinder* pBinder, PEImage *pImage, bool excludeAppPaths) { CONTRACT(Assembly*) { @@ -152,7 +152,7 @@ Assembly* AssemblyNative::LoadFromPEImage(AssemblyBinder* pBinder, PEImage *pIma HRESULT hr = S_OK; PTR_AppDomain pCurDomain = GetAppDomain(); - hr = pBinder->BindUsingPEImage(pImage, &pAssembly); + hr = pBinder->BindUsingPEImage(pImage, excludeAppPaths, &pAssembly); if (hr != S_OK) { diff --git a/src/coreclr/vm/assemblynative.hpp b/src/coreclr/vm/assemblynative.hpp index bbff58bb6a9..944c327fb66 100644 --- a/src/coreclr/vm/assemblynative.hpp +++ b/src/coreclr/vm/assemblynative.hpp @@ -25,7 +25,7 @@ class AssemblyNative public: - static Assembly* LoadFromPEImage(AssemblyBinder* pBinder, PEImage *pImage); + static Assembly* LoadFromPEImage(AssemblyBinder* pBinder, PEImage *pImage, bool excludeAppPaths = false); // static FCALLs static FCDECL0(FC_BOOL_RET, IsTracingEnabled); diff --git a/src/coreclr/vm/assemblyspec.cpp b/src/coreclr/vm/assemblyspec.cpp index 14ad9e680b1..2270d62c803 100644 --- a/src/coreclr/vm/assemblyspec.cpp +++ b/src/coreclr/vm/assemblyspec.cpp @@ -503,7 +503,7 @@ Assembly *AssemblySpec::LoadAssembly(LPCWSTR pFilePath) if (!pILImage->CheckILFormat()) THROW_BAD_FORMAT(BFA_BAD_IL, pILImage.GetValue()); - RETURN AssemblyNative::LoadFromPEImage(AppDomain::GetCurrentDomain()->GetDefaultBinder(), pILImage); + RETURN AssemblyNative::LoadFromPEImage(AppDomain::GetCurrentDomain()->GetDefaultBinder(), pILImage, true /* excludeAppPaths */); } HRESULT AssemblySpec::CheckFriendAssemblyName() -- GitLab