Vincent Povirk : gdiplus: Fix a memory leak in GdipCreateMetafileFromWmf.

Alexandre Julliard julliard at winehq.org
Mon Jan 4 10:54:15 CST 2010


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

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Thu Dec 31 16:15:37 2009 -0600

gdiplus: Fix a memory leak in GdipCreateMetafileFromWmf.

---

 dlls/gdiplus/graphics.c |   11 +++++++----
 1 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c
index 563e43a..a4f1158 100644
--- a/dlls/gdiplus/graphics.c
+++ b/dlls/gdiplus/graphics.c
@@ -1217,7 +1217,7 @@ GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE hwmf, BOOL delete,
     UINT read;
     BYTE* copy;
     HENHMETAFILE hemf;
-    GpStatus retval = GenericError;
+    GpStatus retval = Ok;
 
     TRACE("(%p, %d, %p, %p)\n", hwmf, delete, placeable, metafile);
 
@@ -1242,6 +1242,7 @@ GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE hwmf, BOOL delete,
     if(CreateStreamOnHGlobal(copy, TRUE, &stream) != S_OK){
         ERR("could not make stream\n");
         GdipFree(copy);
+        retval = GenericError;
         goto err;
     }
 
@@ -1253,7 +1254,10 @@ GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE hwmf, BOOL delete,
 
     if(OleLoadPicture(stream, 0, FALSE, &IID_IPicture,
         (LPVOID*) &((*metafile)->image.picture)) != S_OK)
+    {
+        retval = GenericError;
         goto err;
+    }
 
 
     (*metafile)->image.type = ImageTypeMetafile;
@@ -1277,10 +1281,9 @@ GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE hwmf, BOOL delete,
 
     TRACE("<-- %p\n", *metafile);
 
-    return Ok;
-
 err:
-    GdipFree(*metafile);
+    if (retval != Ok)
+        GdipFree(*metafile);
     IStream_Release(stream);
     return retval;
 }




More information about the wine-cvs mailing list