Author: tkreuzer Date: Fri Apr 27 10:12:26 2012 New Revision: 56437
URL: http://svn.reactos.org/svn/reactos?rev=56437&view=rev Log: [WIN32K] In NtGdiGetPixel check if the requested pixel is inside the boundaries of the surface, and return CLR_INVALID if not.
Modified: trunk/reactos/win32ss/gdi/ntgdi/bitblt.c
Modified: trunk/reactos/win32ss/gdi/ntgdi/bitblt.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/gdi/ntgdi/bitblt.c?... ============================================================================== --- trunk/reactos/win32ss/gdi/ntgdi/bitblt.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/gdi/ntgdi/bitblt.c [iso-8859-1] Fri Apr 27 10:12:26 2012 @@ -1109,8 +1109,7 @@ _In_ INT y) { PDC pdc; - ULONG ulRGBColor; - BOOL bResult = FALSE; + ULONG ulRGBColor = CLR_INVALID; POINTL ptlSrc; PSURFACE psurfSrc, psurfDest;
@@ -1119,7 +1118,7 @@ if (!pdc) { EngSetLastError(ERROR_INVALID_HANDLE); - return -1; + return CLR_INVALID; }
/* Check if the DC has no surface (empty mem or info DC) */ @@ -1127,8 +1126,7 @@ if (psurfSrc == NULL) { /* Fail! */ - DC_UnlockDc(pdc); - return -1; + goto leave; }
/* Get the logical coordinates */ @@ -1139,6 +1137,14 @@ IntLPtoDP(pdc, &ptlSrc, 1); ptlSrc.x += pdc->ptlDCOrig.x; ptlSrc.y += pdc->ptlDCOrig.y; + + /* Check if the pixel is outside the surface */ + if ((ptlSrc.x >= psurfSrc->SurfObj.sizlBitmap.cx) || + (ptlSrc.y >= psurfSrc->SurfObj.sizlBitmap.cy)) + { + /* Fail! */ + goto leave; + }
/* Allocate a surface */ psurfDest = SURFACE_AllocSurface(STYPE_BITMAP, 1, 1, BMF_32BPP); @@ -1159,12 +1165,12 @@ RGB(0,0,0));
/* Call the copy bits function */ - bResult = IntEngCopyBits(&psurfDest->SurfObj, - &psurfSrc->SurfObj, - NULL, - &exlo.xlo, - &rclDest, - &ptlSrc); + EngCopyBits(&psurfDest->SurfObj, + &psurfSrc->SurfObj, + NULL, + &exlo.xlo, + &rclDest, + &ptlSrc);
/* Cleanup the XLATEOBJ */ EXLATEOBJ_vCleanup(&exlo); @@ -1174,10 +1180,11 @@ GDIOBJ_vDeleteObject(&psurfDest->BaseObject); }
+leave: /* Unlock the DC */ DC_UnlockDc(pdc);
/* Return the new RGB color or -1 on failure */ - return bResult ? ulRGBColor : -1; -} - + return ulRGBColor; +} +