Vincent Povirk : gdiplus: Properly clean up the new metafile data.

Alexandre Julliard julliard at winehq.org
Wed Jun 22 11:48:40 CDT 2011


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

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Tue Jun 21 12:48:11 2011 -0500

gdiplus: Properly clean up the new metafile data.

---

 dlls/gdiplus/image.c    |   16 +++++++++++++++-
 dlls/gdiplus/metafile.c |    4 ++++
 2 files changed, 19 insertions(+), 1 deletions(-)

diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c
index 10376f5..161a5b3 100644
--- a/dlls/gdiplus/image.c
+++ b/dlls/gdiplus/image.c
@@ -2027,7 +2027,21 @@ GpStatus WINGDIPAPI GdipDisposeImage(GpImage *image)
         DeleteDC(((GpBitmap*)image)->hdc);
         DeleteObject(((GpBitmap*)image)->hbitmap);
     }
-    else if (image->type != ImageTypeMetafile)
+    else if (image->type == ImageTypeMetafile)
+    {
+        GpMetafile *metafile = (GpMetafile*)image;
+        GdipFree(metafile->comment_data);
+        DeleteEnhMetaFile(CloseEnhMetaFile(metafile->record_dc));
+        DeleteEnhMetaFile(metafile->hemf);
+        if (metafile->record_graphics)
+        {
+            WARN("metafile closed while recording\n");
+            /* not sure what to do here; for now just prevent the graphics from functioning or using this object */
+            metafile->record_graphics->image = NULL;
+            metafile->record_graphics->busy = TRUE;
+        }
+    }
+    else
     {
         WARN("invalid image: %p\n", image);
         return ObjectBusy;
diff --git a/dlls/gdiplus/metafile.c b/dlls/gdiplus/metafile.c
index 26dba93..322aecf 100644
--- a/dlls/gdiplus/metafile.c
+++ b/dlls/gdiplus/metafile.c
@@ -307,6 +307,10 @@ GpStatus METAFILE_GraphicsDeleted(GpMetafile* metafile)
     metafile->hemf = CloseEnhMetaFile(metafile->record_dc);
     metafile->record_dc = NULL;
 
+    GdipFree(metafile->comment_data);
+    metafile->comment_data = NULL;
+    metafile->comment_data_size = 0;
+
     return stat;
 }
 




More information about the wine-cvs mailing list