From 736804a3fb2d7e2eeea9c76819e028ecfbbdcb7c Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Tue, 21 Jun 2011 12:48:11 -0500 Subject: [PATCH] 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; } -- 1.7.2.5