[NTGDI] Prevent NULL pointer dereference in CLIPPING_UpdateGCRegion

This can happen, when the paged pool is full. This will probably cause drawing issues, but at least we don't crash (in this place).
This commit is contained in:
Timo Kreuzer 2024-09-05 13:17:18 +03:00
parent 299e4305ef
commit 9414fb6b59

View File

@ -11,6 +11,8 @@
#define NDEBUG #define NDEBUG
#include <debug.h> #include <debug.h>
DBG_DEFAULT_CHANNEL(GdiClipRgn);
VOID VOID
FASTCALL FASTCALL
IntGdiReleaseRaoRgn(PDC pDC) IntGdiReleaseRaoRgn(PDC pDC)
@ -776,16 +778,16 @@ CLIPPING_UpdateGCRegion(PDC pDC)
pDC->prgnAPI = NULL; pDC->prgnAPI = NULL;
} }
if (pDC->prgnRao)
REGION_Delete(pDC->prgnRao);
pDC->prgnRao = IntSysCreateRectpRgn(0,0,0,0);
ASSERT(pDC->prgnRao);
if (pDC->dclevel.prgnMeta || pDC->dclevel.prgnClip) if (pDC->dclevel.prgnMeta || pDC->dclevel.prgnClip)
{ {
pDC->prgnAPI = IntSysCreateRectpRgn(0,0,0,0); pDC->prgnAPI = IntSysCreateRectpRgn(0,0,0,0);
if (!pDC->prgnAPI)
{
/* Best we can do here. Better than crashing. */
ERR("Failed to allocate prgnAPI! Expect drawing issues!\n");
return;
}
if (!pDC->dclevel.prgnMeta) if (!pDC->dclevel.prgnMeta)
{ {
REGION_bCopy(pDC->prgnAPI, REGION_bCopy(pDC->prgnAPI,
@ -804,6 +806,17 @@ CLIPPING_UpdateGCRegion(PDC pDC)
} }
} }
if (pDC->prgnRao)
REGION_Delete(pDC->prgnRao);
pDC->prgnRao = IntSysCreateRectpRgn(0,0,0,0);
if (!pDC->prgnRao)
{
/* Best we can do here. Better than crashing. */
ERR("Failed to allocate prgnRao! Expect drawing issues!\n");
return;
}
if (pDC->prgnAPI) if (pDC->prgnAPI)
{ {
REGION_bIntersectRegion(pDC->prgnRao, REGION_bIntersectRegion(pDC->prgnRao,