Module: wine Branch: master Commit: 698fddf99b01560ebfdc1f4a827398778dccaa64 URL: http://source.winehq.org/git/wine.git/?a=commit;h=698fddf99b01560ebfdc1f4a82...
Author: Vincent Povirk vincent@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; }