Handle SPC in GetLoadContext
authorSteve MacLean <Steve.MacLean@Microsoft.com>
Mon, 4 Feb 2019 18:36:52 +0000 (13:36 -0500)
committerSteve MacLean <stmaclea@microsoft.com>
Tue, 5 Feb 2019 00:05:47 +0000 (19:05 -0500)
GetBindingContext() returns NULL for System.Private.CoreLib.  Add support
for this special case.

src/vm/assemblynative.cpp

index 4167263..6a8efff 100644 (file)
@@ -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<ICLRPrivBinder *>(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<ICLRPrivBinder *>(assemblyBinderID);
+    }
+    else
+    {
+        // GetBindingContext() returns NULL for System.Private.CoreLib
+        pOpaqueBinder = pTPABinder;
+    }
 
     // We should have a load context binder at this point.
     _ASSERTE(pOpaqueBinder != nullptr);