Author: tkreuzer Date: Sun Aug 22 22:44:36 2010 New Revision: 48595
URL: http://svn.reactos.org/svn/reactos?rev=48595&view=rev Log: [WIN32K] - When doing a cleanup for a DC, check, if the default brushes are set, before dereferencing them. Fixes a possible kernel mode crash. - Remove some obsolete casts
Modified: trunk/reactos/subsystems/win32/win32k/objects/dclife.c
Modified: trunk/reactos/subsystems/win32/win32k/objects/dclife.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/obj... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/objects/dclife.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/objects/dclife.c [iso-8859-1] Sun Aug 22 22:44:36 2010 @@ -165,8 +165,10 @@ DC_vSelectPalette(pDC, NULL);
/* Dereference default brushes */ - BRUSH_ShareUnlockBrush(pDC->eboText.pbrush); - BRUSH_ShareUnlockBrush(pDC->eboBackground.pbrush); + if (pDC->eboText.pbrush) + BRUSH_ShareUnlockBrush(pDC->eboText.pbrush); + if (pDC->eboBackground.pbrush) + BRUSH_ShareUnlockBrush(pDC->eboBackground.pbrush);
/* Cleanup the dc brushes */ EBRUSHOBJ_vCleanup(&pDC->eboFill); @@ -205,12 +207,12 @@ } if (pDC->prgnVis) { // FIXME! HAX!!! - Index = GDI_HANDLE_GET_INDEX(((PROSRGNDATA)pDC->prgnVis)->BaseObject.hHmgr); + Index = GDI_HANDLE_GET_INDEX(pDC->prgnVis->BaseObject.hHmgr); Entry = &GdiHandleTable->Entries[Index]; if (Entry->UserData) FreeObjectAttr(Entry->UserData); Entry->UserData = NULL; // - if (!GDIOBJ_SetOwnership(((PROSRGNDATA)pDC->prgnVis)->BaseObject.hHmgr, Owner)) return FALSE; + if (!GDIOBJ_SetOwnership(pDC->prgnVis->BaseObject.hHmgr, Owner)) return FALSE; } if (pDC->rosdc.hGCClipRgn) { // FIXME! HAX!!!