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/ob…
==============================================================================
--- 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!!!