Rob Shearman : gdi32: Fix memory leaks on EMF_Create_HENHMETAFILE failure.

Alexandre Julliard julliard at winehq.org
Mon Dec 14 09:51:26 CST 2009


Module: wine
Branch: master
Commit: eb81fa283b5efbf15dd9360bf1a95ac809374b80
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=eb81fa283b5efbf15dd9360bf1a95ac809374b80

Author: Rob Shearman <robertshearman at gmail.com>
Date:   Mon Dec 14 14:12:58 2009 +0000

gdi32: Fix memory leaks on EMF_Create_HENHMETAFILE failure.

---

 dlls/gdi32/enhmetafile.c |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/dlls/gdi32/enhmetafile.c b/dlls/gdi32/enhmetafile.c
index 95e5589..adb19a0 100644
--- a/dlls/gdi32/enhmetafile.c
+++ b/dlls/gdi32/enhmetafile.c
@@ -466,8 +466,12 @@ UINT WINAPI GetEnhMetaFileDescriptionW(
 HENHMETAFILE WINAPI SetEnhMetaFileBits(UINT bufsize, const BYTE *buf)
 {
     ENHMETAHEADER *emh = HeapAlloc( GetProcessHeap(), 0, bufsize );
+    HENHMETAFILE hmf;
     memmove(emh, buf, bufsize);
-    return EMF_Create_HENHMETAFILE( emh, FALSE );
+    hmf = EMF_Create_HENHMETAFILE( emh, FALSE );
+    if (!hmf)
+        HeapFree( GetProcessHeap(), 0, emh );
+    return hmf;
 }
 
 /*****************************************************************************
@@ -2509,6 +2513,8 @@ HENHMETAFILE WINAPI CopyEnhMetaFileA(
         emrDst = HeapAlloc( GetProcessHeap(), 0, emrSrc->nBytes );
 	memcpy( emrDst, emrSrc, emrSrc->nBytes );
 	hmfDst = EMF_Create_HENHMETAFILE( emrDst, FALSE );
+	if (!hmfDst)
+		HeapFree( GetProcessHeap(), 0, emrDst );
     } else {
         HANDLE hFile;
         DWORD w;
@@ -2549,6 +2555,8 @@ HENHMETAFILE WINAPI CopyEnhMetaFileW(
         emrDst = HeapAlloc( GetProcessHeap(), 0, emrSrc->nBytes );
 	memcpy( emrDst, emrSrc, emrSrc->nBytes );
 	hmfDst = EMF_Create_HENHMETAFILE( emrDst, FALSE );
+	if (!hmfDst)
+		HeapFree( GetProcessHeap(), 0, emrDst );
     } else {
         HANDLE hFile;
         DWORD w;




More information about the wine-cvs mailing list