Module: wine Branch: master Commit: 0bd3d8e68ef82f0a739d29994ee69f62397f6627 URL: http://source.winehq.org/git/wine.git/?a=commit;h=0bd3d8e68ef82f0a739d29994e...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Jan 2 17:09:10 2007 +0100
gdi32: Avoid leaking a handle in MFDRV_ExtSelectClipRgn.
---
dlls/gdi32/mfdrv/graphics.c | 1 + dlls/gdi32/mfdrv/metafiledrv.h | 1 + dlls/gdi32/mfdrv/objects.c | 17 +++++++++++++++++ 3 files changed, 19 insertions(+), 0 deletions(-)
diff --git a/dlls/gdi32/mfdrv/graphics.c b/dlls/gdi32/mfdrv/graphics.c index c0c922c..316ee78 100644 --- a/dlls/gdi32/mfdrv/graphics.c +++ b/dlls/gdi32/mfdrv/graphics.c @@ -420,6 +420,7 @@ INT MFDRV_ExtSelectClipRgn( PHYSDEV dev, if(iRgn == -1) return ERROR; ret = MFDRV_MetaParam1( dev, META_SELECTCLIPREGION, iRgn ) ? NULLREGION : ERROR; MFDRV_MetaParam1( dev, META_DELETEOBJECT, iRgn ); + MFDRV_RemoveHandle( dev, iRgn ); return ret; }
diff --git a/dlls/gdi32/mfdrv/metafiledrv.h b/dlls/gdi32/mfdrv/metafiledrv.h index 98d9e15..00cb8d4 100644 --- a/dlls/gdi32/mfdrv/metafiledrv.h +++ b/dlls/gdi32/mfdrv/metafiledrv.h @@ -56,6 +56,7 @@ extern BOOL MFDRV_MetaParam8(PHYSDEV dev short param6, short param7, short param8); extern BOOL MFDRV_WriteRecord(PHYSDEV dev, METARECORD *mr, DWORD rlen); extern UINT MFDRV_AddHandle( PHYSDEV dev, HGDIOBJ obj ); +extern BOOL MFDRV_RemoveHandle( PHYSDEV dev, UINT index ); extern INT16 MFDRV_CreateBrushIndirect( PHYSDEV dev, HBRUSH hBrush );
/* Metafile driver functions */ diff --git a/dlls/gdi32/mfdrv/objects.c b/dlls/gdi32/mfdrv/objects.c index 4dc809a..a43598b 100644 --- a/dlls/gdi32/mfdrv/objects.c +++ b/dlls/gdi32/mfdrv/objects.c @@ -59,6 +59,23 @@ UINT MFDRV_AddHandle( PHYSDEV dev, HGDIO }
/****************************************************************** + * MFDRV_RemoveHandle + */ +BOOL MFDRV_RemoveHandle( PHYSDEV dev, UINT index ) +{ + METAFILEDRV_PDEVICE *physDev = (METAFILEDRV_PDEVICE *)dev; + BOOL ret = FALSE; + + if (index < physDev->handles_size && physDev->handles[index]) + { + physDev->handles[index] = 0; + physDev->cur_handles--; + ret = TRUE; + } + return ret; +} + +/****************************************************************** * MFDRV_FindObject */ static INT16 MFDRV_FindObject( PHYSDEV dev, HGDIOBJ obj )