8000 Address feedback · awakecoding/PowerShell@b441aa2 · GitHub
[go: up one dir, main page]

Skip to content

Commit b441aa2

Browse files
daxian-dbwSteveL-MSFT
authored andcommitted
Address feedback
1 parent 2a2efcf commit b441aa2

File tree

2 files changed

+22
-13
lines changed

2 files changed

+22
-13
lines changed

src/System.Management.Automation/CoreCLR/CorePsAssemblyLoadContext.cs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -596,17 +596,22 @@ public static unsafe class PowerShellUnsafeAssemblyLoad
596596
/// <summary>
597597
/// Load an assembly in memory from unmanaged code.
598598
/// </summary>
599-
/// <param name="data">
600-
/// Unmanaged pointer to assembly data buffer.
601-
/// </param>
602-
/// <param name="size">
603-
/// Size in bytes of the assembly data buffer.
604-
/// </param>
599+
/// <param name="data">Unmanaged pointer to assembly data buffer.</param>
600+
/// <param name="size">Size in bytes of the assembly data buffer.</param>
601+
/// <returns>Returns zero on success and non-zero on failure</returns>
605602
[UnmanagedCallersOnly]
606-
public static void LoadAssemblyFromNativeMemory(IntPtr data, int size)
603+
public static int LoadAssemblyFromNativeMemory(IntPtr data, int size)
607604
{
608-
using var stream = new UnmanagedMemoryStream((byte*)data, size);
609-
AssemblyLoadContext.Default.LoadFromStream(stream);
605+
try
606+
{
607+
using var stream = new UnmanagedMemoryStream((byte*)data, size);
608+
AssemblyLoadContext.Default.LoadFromStream(stream);
609+
return 0;
610+
}
611+
catch
612+
{
613+
return -1;
614+
}
610615
}
611616
}
612617
}

test/xUnit/csharp/test_NativeInterop.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,21 @@ public static void TestLoadNativeInMemoryAssembly()
3535
string asmFullName = SearchAssembly(asmName.Name);
3636
Assert.Null(asmFullName);
3737

38-
unsafe { LoadAssemblyTest(testDll); }
38+
unsafe
39+
{
40+
int ret = LoadAssemblyTest(testDll);
41+
Assert.Equal(0, ret);
42+
}
3943

4044
asmFullName = SearchAssembly(asmName.Name);
4145
Assert.Equal(asmName.FullName, asmFullName);
4246
}
4347

44-
private static unsafe void LoadAssemblyTest(string assemblyPath)
48+
private static unsafe int LoadAssemblyTest(string assemblyPath)
4549
{
4650
// The 'LoadAssemblyFromNativeMemory' method is annotated with 'UnmanagedCallersOnly' attribute,
4751
// so we have to use the 'unmanaged' function pointer to invoke it.
48-
delegate* unmanaged<IntPtr, int, void> funcPtr = &PowerShellUnsafeAssemblyLoad.LoadAssemblyFromNativeMemory;
52+
delegate* unmanaged<IntPtr, int, int> funcPtr = &PowerShellUnsafeAssemblyLoad.LoadAssemblyFromNativeMemory;
4953

5054
int length = 0;
5155
IntPtr nativeMem = IntPtr.Zero;
@@ -62,7 +66,7 @@ private static unsafe void LoadAssemblyTest(string assemblyPath)
6266
}
6367

6468
// Call the function pointer.
65-
funcPtr(nativeMem, length);
69+
return funcPtr(nativeMem, length);
6670
}
6771
finally
6872
{

0 commit comments

Comments
 (0)
0