Author: tfaber
Date: Sun Apr 30 18:41:56 2017
New Revision: 74435
URL: 
http://svn.reactos.org/svn/reactos?rev=74435&view=rev
Log:
[WIN32K]
- Check for null members when cleaning up DCs and brushes. Fixes crashes in some failure
cases when running out of GDI handles.
CORE-13155
Modified:
    trunk/reactos/win32ss/gdi/eng/engbrush.c
    trunk/reactos/win32ss/gdi/ntgdi/dclife.c
Modified: trunk/reactos/win32ss/gdi/eng/engbrush.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/gdi/eng/engbrush.c…
==============================================================================
--- trunk/reactos/win32ss/gdi/eng/engbrush.c    [iso-8859-1] (original)
+++ trunk/reactos/win32ss/gdi/eng/engbrush.c    [iso-8859-1] Sun Apr 30 18:41:56 2017
@@ -175,9 +175,18 @@
     }
     /* Dereference the palettes */
-    PALETTE_ShareUnlockPalette(pebo->ppalSurf);
-    PALETTE_ShareUnlockPalette(pebo->ppalDC);
-    if (pebo->ppalDIB) PALETTE_ShareUnlockPalette(pebo->ppalDIB);
+    if (pebo->ppalSurf)
+    {
+        PALETTE_ShareUnlockPalette(pebo->ppalSurf);
+    }
+    if (pebo->ppalDC)
+    {
+        PALETTE_ShareUnlockPalette(pebo->ppalDC);
+    }
+    if (pebo->ppalDIB)
+    {
+        PALETTE_ShareUnlockPalette(pebo->ppalDIB);
+    }
 }
 VOID
Modified: trunk/reactos/win32ss/gdi/ntgdi/dclife.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/gdi/ntgdi/dclife.c…
==============================================================================
--- trunk/reactos/win32ss/gdi/ntgdi/dclife.c    [iso-8859-1] (original)
+++ trunk/reactos/win32ss/gdi/ntgdi/dclife.c    [iso-8859-1] Sun Apr 30 18:41:56 2017
@@ -91,7 +91,6 @@
     /* Insert the object */
     if (!GDIOBJ_hInsertObject(&pdc->BaseObject, GDI_OBJ_HMGR_POWNED))
     {
-        /// FIXME: this is broken, since the DC is not initialized yet...
         DPRINT1("Could not insert DC into handle table.\n");
         GDIOBJ_vFreeObject(&pdc->BaseObject);
         return NULL;
@@ -370,7 +369,8 @@
     EBRUSHOBJ_vCleanup(&pdc->eboBackground);
     /* Release font */
-    LFONT_ShareUnlockFont(pdc->dclevel.plfnt);
+    if (pdc->dclevel.plfnt)
+        LFONT_ShareUnlockFont(pdc->dclevel.plfnt);
     /*  Free regions */
     if (pdc->dclevel.prgnClip)
@@ -394,10 +394,11 @@
        pdc->dclevel.hPath = 0;
        pdc->dclevel.flPath = 0;
     }
-    if(pdc->dclevel.pSurface)
+    if (pdc->dclevel.pSurface)
         SURFACE_ShareUnlockSurface(pdc->dclevel.pSurface);
-    PDEVOBJ_vRelease(pdc->ppdev);
+    if (pdc->ppdev)
+        PDEVOBJ_vRelease(pdc->ppdev);
 }
 VOID