From 8ef84b4844f4fe520de7a8161026c14d633988fe Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 14 Apr 2026 21:07:42 +0000 Subject: [PATCH 1/3] Initial plan From 2405c11b9b31016ab198ba5da57ab816ae094a73 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 14 Apr 2026 21:31:14 +0000 Subject: [PATCH 2/3] Fix native memory leak in AsAnyMarshaler.ConvertLayoutToNative Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/33ae7353-2afd-4be1-9081-898caba946da Co-authored-by: jkoritzinsky <1571408+jkoritzinsky@users.noreply.github.com> --- .../System.Private.CoreLib/src/System/StubHelpers.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/coreclr/System.Private.CoreLib/src/System/StubHelpers.cs b/src/coreclr/System.Private.CoreLib/src/System/StubHelpers.cs index 890bff5ec3c7ec..02a05bb98c2b49 100644 --- a/src/coreclr/System.Private.CoreLib/src/System/StubHelpers.cs +++ b/src/coreclr/System.Private.CoreLib/src/System/StubHelpers.cs @@ -1265,9 +1265,17 @@ private unsafe IntPtr ConvertLayoutToNative(object pManagedHome, int dwFlags) IntPtr pNativeHome = Marshal.AllocCoTaskMem(allocSize); // marshal the object as class with layout (UnmanagedType.LPStruct) - if (IsIn(dwFlags)) + try + { + if (IsIn(dwFlags)) + { + StubHelpers.LayoutTypeConvertToUnmanaged(pManagedHome, (byte*)pNativeHome, ref cleanupWorkList); + } + } + catch { - StubHelpers.LayoutTypeConvertToUnmanaged(pManagedHome, (byte*)pNativeHome, ref cleanupWorkList); + Marshal.FreeCoTaskMem(pNativeHome); + throw; } if (IsOut(dwFlags)) { From 7e6b02951dede8088a2b29a2780b358bb04d2d56 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Tue, 14 Apr 2026 15:57:27 -0700 Subject: [PATCH 3/3] Apply suggestion from @jkoritzinsky --- src/coreclr/System.Private.CoreLib/src/System/StubHelpers.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/coreclr/System.Private.CoreLib/src/System/StubHelpers.cs b/src/coreclr/System.Private.CoreLib/src/System/StubHelpers.cs index 02a05bb98c2b49..0693991d3cb753 100644 --- a/src/coreclr/System.Private.CoreLib/src/System/StubHelpers.cs +++ b/src/coreclr/System.Private.CoreLib/src/System/StubHelpers.cs @@ -1274,6 +1274,7 @@ private unsafe IntPtr ConvertLayoutToNative(object pManagedHome, int dwFlags) } catch { + StubHelpers.DestroyCleanupList(ref cleanupWorkList); Marshal.FreeCoTaskMem(pNativeHome); throw; }