mirror of
https://github.com/reactos/reactos.git
synced 2024-11-27 05:23:33 +08:00
[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:
parent
299e4305ef
commit
9414fb6b59
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user