Module: wine Branch: master Commit: eb81fa283b5efbf15dd9360bf1a95ac809374b80 URL: http://source.winehq.org/git/wine.git/?a=commit;h=eb81fa283b5efbf15dd9360bf1...
Author: Rob Shearman robertshearman@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;