1. remove hack in NtGdiCreateBitmap
authorMagnus Olsen <magnus@greatlord.com>
Sat, 10 May 2008 11:23:54 +0000 (11:23 +0000)
committerMagnus Olsen <magnus@greatlord.com>
Sat, 10 May 2008 11:23:54 +0000 (11:23 +0000)
2. BugFix IntGdiCreateBitmap
   1. Height can not be negative value
   2. width can not be negative value
   3. Planes or BitsPerPixel can not be biger that 32Bpp
   4. BitsPerPixel can not be 0
   5. width size is max  0x7FFFFFFF hex

svn path=/trunk/; revision=33403

reactos/subsystems/win32/win32k/objects/bitmaps.c

index 851e689..8100d9b 100644 (file)
@@ -43,22 +43,24 @@ IntGdiCreateBitmap(
    SIZEL Size;
    LONG WidthBytes;
 
+
    /* NOTE: Windows also doesn't store nr. of planes separately! */
    BitsPixel = BITMAPOBJ_GetRealBitsPixel(BitsPixel * Planes);
 
    /* Check parameters */
-   if (BitsPixel == 0 || Width < 0)
-   {
-      DPRINT1("Width = %d, Height = %d BitsPixel = %d\n", Width, Height, BitsPixel);
-      SetLastWin32Error(ERROR_INVALID_PARAMETER);
-      return 0;
-   }
 
-   WidthBytes = BITMAPOBJ_GetWidthBytes(Width, Planes * BitsPixel);
+    if ( (Height <= 0) || (Width <= 0) || (Width > 0x7FFFFFFF) || 
+         (Planes > 32) || (BitsPixel > 32) || (BitsPixel == 0) )
+    {
+        DPRINT1("Width = %d, Height = %d BitsPixel = %d\n", Width, Height, BitsPixel);
+        SetLastWin32Error(ERROR_INVALID_PARAMETER);
+        return 0;
+    }
 
-   Size.cx = abs(Width);
-   Size.cy = abs(Height);
+   WidthBytes = BITMAPOBJ_GetWidthBytes(Width, Planes * BitsPixel);
 
+   Size.cx = Width;
+   Size.cy = Height;
    /* Create the bitmap object. */
    hBitmap = IntCreateBitmap(Size, WidthBytes,
                              BitmapFormat(BitsPixel, BI_RGB),
@@ -112,14 +114,7 @@ NtGdiCreateBitmap(
          ProbeForRead(pUnsafeBits, cjBits, 1);
       }
 
-      if (0 == Width || 0 == Height)
-      {
-         hBitmap = IntGdiCreateBitmap (1, 1, 1, 1, NULL);
-      }
-      else
-      {
-        hBitmap = IntGdiCreateBitmap(Width, Height, Planes, BitsPixel, pUnsafeBits);
-      }
+      hBitmap = IntGdiCreateBitmap(Width, Height, Planes, BitsPixel, pUnsafeBits);
    }
    _SEH_HANDLE
    {