未验证 提交 5713beac 编写于 作者: J Jan Kotas 提交者: GitHub

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
上级 11d8e264
......@@ -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))
......
......@@ -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);
......
......@@ -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);
......
......@@ -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)
......
......@@ -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,
......
......@@ -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,
......
......@@ -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;
/// <summary>
......
......@@ -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)
{
......
......@@ -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);
......
......@@ -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()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册