From abbb3c6a5ac3b59beaa7b604dc781f66277ffbe6 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 11 Aug 2012 22:40:50 +0000 Subject: [PATCH] [VGA] Fix possible NULL pointer dereference. Patch by numitus (domovoi94 at gmail dot com) svn path=/trunk/; revision=57058 --- .../drivers/displays/vga/objects/bitblt.c | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/reactos/win32ss/drivers/displays/vga/objects/bitblt.c b/reactos/win32ss/drivers/displays/vga/objects/bitblt.c index 30015b333b9..ed24a2af3bc 100644 --- a/reactos/win32ss/drivers/displays/vga/objects/bitblt.c +++ b/reactos/win32ss/drivers/displays/vga/objects/bitblt.c @@ -426,6 +426,18 @@ DrvBitBlt( UINT i; POINTL Pt; ULONG Direction; + POINTL FinalSourcePoint; + + if (Source && SourcePoint) + { + FinalSourcePoint.x = SourcePoint->x; + FinalSourcePoint.y = SourcePoint->y; + } + else + { + FinalSourcePoint.x = 0; + FinalSourcePoint.y = 0; + } switch (rop4) { @@ -462,8 +474,8 @@ DrvBitBlt( case DC_RECT: /* Clip the blt to the clip rectangle */ VGADDI_IntersectRect(&CombinedRect, DestRect, &(Clip->rclBounds)); - Pt.x = SourcePoint->x + CombinedRect.left - DestRect->left; - Pt.y = SourcePoint->y + CombinedRect.top - DestRect->top; + Pt.x = FinalSourcePoint.x + CombinedRect.left - DestRect->left; + Pt.y = FinalSourcePoint.y + CombinedRect.top - DestRect->top; Ret = (*BltRectFunc)(Dest, Source, Mask, ColorTranslation, &CombinedRect, &Pt, MaskPoint, Brush, BrushPoint, rop4); @@ -472,10 +484,10 @@ DrvBitBlt( Ret = TRUE; if (Dest == Source) { - if (DestRect->top <= SourcePoint->y) - Direction = DestRect->left < SourcePoint->x ? CD_RIGHTDOWN : CD_LEFTDOWN; + if (DestRect->top <= FinalSourcePoint.y) + Direction = DestRect->left < FinalSourcePoint.y ? CD_RIGHTDOWN : CD_LEFTDOWN; else - Direction = DestRect->left < SourcePoint->x ? CD_RIGHTUP : CD_LEFTUP; + Direction = DestRect->left < FinalSourcePoint.x ? CD_RIGHTUP : CD_LEFTUP; } else { @@ -489,8 +501,8 @@ DrvBitBlt( for (i = 0; i < RectEnum.c; i++) { VGADDI_IntersectRect(&CombinedRect, DestRect, RectEnum.arcl + i); - Pt.x = SourcePoint->x + CombinedRect.left - DestRect->left; - Pt.y = SourcePoint->y + CombinedRect.top - DestRect->top; + Pt.x = FinalSourcePoint.x + CombinedRect.left - DestRect->left; + Pt.y = FinalSourcePoint.y + CombinedRect.top - DestRect->top; Ret = (*BltRectFunc)(Dest, Source, Mask, ColorTranslation, &CombinedRect, &Pt, MaskPoint, Brush, BrushPoint, rop4) && Ret;