[WIN32K]
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Sun, 25 May 2014 12:59:17 +0000 (12:59 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Sun, 25 May 2014 12:59:17 +0000 (12:59 +0000)
Make sure to check for invalid NULL handles before passing them to GDIOBJ_bLockMultipleObjects, which skips NULL handles. This is a design limitation, since otherwise we either need to pass a bitfield of valid handles, or duplicate  code in certain functions, where different combinations of dest, source and mask dc are allowed.

svn path=/trunk/; revision=63442

reactos/win32ss/gdi/ntgdi/bitblt.c

index a567290..e27c5e2 100644 (file)
@@ -47,6 +47,12 @@ NtGdiAlphaBlend(
         return FALSE;
     }
 
+    if ((hDCDest == NULL) || (hDCSrc == NULL))
+    {
+        EngSetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
+
     TRACE("Locking DCs\n");
     ahDC[0] = hDCDest;
     ahDC[1] = hDCSrc ;
@@ -161,14 +167,14 @@ NtGdiBitBlt(
        return NtGdiStretchBlt(hDCDest,
                               XDest,
                               YDest,
-                              Width,  
+                              Width,
                               Height,
                               hDCSrc,
                               XSrc,
                               YSrc,
                               Width,
                               Height,
-                              ROP, 
+                              ROP,
                               crBackColor);
 
     dwTRop = ROP & ~(NOMIRRORBITMAP|CAPTUREBLT);
@@ -213,6 +219,12 @@ NtGdiTransparentBlt(
     BOOL Ret = FALSE;
     EXLATEOBJ exlo;
 
+    if ((hdcDst == NULL) || (hdcSrc == NULL))
+    {
+        EngSetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
+
     TRACE("Locking DCs\n");
     ahDC[0] = hdcDst;
     ahDC[1] = hdcSrc ;