From 7e20b6fa7b2253511b6f0a7d76c955360e040df6 Mon Sep 17 00:00:00 2001 From: Steve MacLean Date: Mon, 4 Feb 2019 13:36:52 -0500 Subject: [PATCH] Handle SPC in GetLoadContext GetBindingContext() returns NULL for System.Private.CoreLib. Add support for this special case. --- src/vm/assemblynative.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/vm/assemblynative.cpp b/src/vm/assemblynative.cpp index 4167263..6a8efff 100644 --- a/src/vm/assemblynative.cpp +++ b/src/vm/assemblynative.cpp @@ -1302,13 +1302,22 @@ INT_PTR QCALLTYPE AssemblyNative::GetLoadContextForAssembly(QCall::AssemblyHandl // actual ICLRPrivBinder instance in which the assembly was loaded. PTR_ICLRPrivBinder pBindingContext = pPEAssembly->GetBindingContext(); UINT_PTR assemblyBinderID = 0; - IfFailThrow(pBindingContext->GetBinderID(&assemblyBinderID)); - // If the assembly was bound using the TPA binder, - // then we will return the reference to "Default" binder from the managed implementation when this QCall returns. - // - // See earlier comment about "Default" binder for additional context. - pOpaqueBinder = reinterpret_cast(assemblyBinderID); + if (pBindingContext) + { + IfFailThrow(pBindingContext->GetBinderID(&assemblyBinderID)); + + // If the assembly was bound using the TPA binder, + // then we will return the reference to "Default" binder from the managed implementation when this QCall returns. + // + // See earlier comment about "Default" binder for additional context. + pOpaqueBinder = reinterpret_cast(assemblyBinderID); + } + else + { + // GetBindingContext() returns NULL for System.Private.CoreLib + pOpaqueBinder = pTPABinder; + } // We should have a load context binder at this point. _ASSERTE(pOpaqueBinder != nullptr); -- 2.7.4