From 90d11817f8ed9ebb3dfa982f83a4866c57df6ba6 Mon Sep 17 00:00:00 2001 From: EgorBo Date: Mon, 29 Jan 2018 20:07:10 +0300 Subject: [PATCH] fix leak in FontFamily --- mcs/class/System.Drawing/System.Drawing/FontFamily.cs | 10 ++++------ mcs/class/System.Drawing/System.Drawing/gdipFunctions.cs | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/mcs/class/System.Drawing/System.Drawing/FontFamily.cs b/mcs/class/System.Drawing/System.Drawing/FontFamily.cs index 73acc4bedb2..79b63b9b5f9 100644 --- a/mcs/class/System.Drawing/System.Drawing/FontFamily.cs +++ b/mcs/class/System.Drawing/System.Drawing/FontFamily.cs @@ -49,17 +49,15 @@ namespace System.Drawing { nativeFontFamily = fntfamily; } - internal void refreshName() + internal unsafe void refreshName() { - StringBuilder sb; - if (nativeFontFamily == IntPtr.Zero) return; - sb = new StringBuilder (GDIPlus.FACESIZE); - Status status = GDIPlus.GdipGetFamilyName (nativeFontFamily, sb, 0); + char* namePtr = stackalloc char[GDIPlus.FACESIZE]; + Status status = GDIPlus.GdipGetFamilyName (nativeFontFamily, (IntPtr)namePtr, 0); GDIPlus.CheckStatus (status); - name = sb.ToString(); + name = Marshal.PtrToStringUni((IntPtr)namePtr); } ~FontFamily() diff --git a/mcs/class/System.Drawing/System.Drawing/gdipFunctions.cs b/mcs/class/System.Drawing/System.Drawing/gdipFunctions.cs index c42b38a20bc..4865269b831 100644 --- a/mcs/class/System.Drawing/System.Drawing/gdipFunctions.cs +++ b/mcs/class/System.Drawing/System.Drawing/gdipFunctions.cs @@ -1560,7 +1560,7 @@ namespace System.Drawing [MarshalAs(UnmanagedType.LPWStr)] string fName, IntPtr collection, out IntPtr fontFamily); [DllImport (GdiPlus, CharSet=CharSet.Unicode)] - internal static extern Status GdipGetFamilyName(IntPtr family, StringBuilder name, int language); + internal static extern Status GdipGetFamilyName(IntPtr family, IntPtr name, int language); [DllImport (GdiPlus)] internal static extern Status GdipGetGenericFontFamilySansSerif (out IntPtr fontFamily); -- 2.11.4.GIT