Evan Stade : gdiplus: Fix memory leak in GdipCreateMetafileFromWMF.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Aug 1 05:16:51 CDT 2007
Module: wine
Branch: master
Commit: cfef981a9aeedc7dab3e626aa0aad6b48dcd87b9
URL: http://source.winehq.org/git/wine.git/?a=commit;h=cfef981a9aeedc7dab3e626aa0aad6b48dcd87b9
Author: Evan Stade <estade at gmail.com>
Date: Tue Jul 31 19:15:12 2007 -0700
gdiplus: Fix memory leak in GdipCreateMetafileFromWMF.
---
dlls/gdiplus/graphics.c | 20 ++++++++++++++------
1 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c
index 80684ff..52d6c5f 100644
--- a/dlls/gdiplus/graphics.c
+++ b/dlls/gdiplus/graphics.c
@@ -846,11 +846,12 @@ GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE hwmf, BOOL delete,
GDIPCONST WmfPlaceableFileHeader * placeable, GpMetafile **metafile)
{
static int calls;
- IStream *stream;
+ IStream *stream = NULL;
UINT read;
BYTE* copy;
METAFILEPICT mfp;
HENHMETAFILE hemf;
+ GpStatus retval = GenericError;
if(!hwmf || !metafile || !placeable)
return InvalidParameter;
@@ -882,16 +883,19 @@ GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE hwmf, BOOL delete,
if(CreateStreamOnHGlobal(copy, TRUE, &stream) != S_OK){
ERR("could not make stream\n");
- return GenericError;
+ goto end;
}
*metafile = GdipAlloc(sizeof(GpMetafile));
- if(!*metafile) return OutOfMemory;
+ if(!*metafile){
+ retval = OutOfMemory;
+ goto end;
+ }
if(OleLoadPicture(stream, 0, FALSE, &IID_IPicture,
(LPVOID*) &((*metafile)->image.picture)) != S_OK){
GdipFree(*metafile);
- return GenericError;
+ goto end;
}
(*metafile)->image.type = ImageTypeMetafile;
@@ -903,11 +907,15 @@ GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE hwmf, BOOL delete,
- placeable->BoundingBox.Top)) / ((REAL) placeable->Inch);
(*metafile)->unit = UnitInch;
-
if(delete)
DeleteMetaFile(hwmf);
- return Ok;
+ retval = Ok;
+
+end:
+ IStream_Release(stream);
+ GdipFree(copy);
+ return retval;
}
GpStatus WINGDIPAPI GdipDeleteGraphics(GpGraphics *graphics)
More information about the wine-cvs
mailing list