[ros-diffs] [greatlrd] 33403: 1. remove hack in NtGdiCreateBitmap 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

greatlrd at svn.reactos.org greatlrd at svn.reactos.org
Sat May 10 13:23:54 CEST 2008


Author: greatlrd
Date: Sat May 10 06:23:54 2008
New Revision: 33403

URL: http://svn.reactos.org/svn/reactos?rev=33403&view=rev
Log:
1. remove hack in NtGdiCreateBitmap
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



Modified:
    trunk/reactos/subsystems/win32/win32k/objects/bitmaps.c

Modified: trunk/reactos/subsystems/win32/win32k/objects/bitmaps.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/bitmaps.c?rev=33403&r1=33402&r2=33403&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/bitmaps.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/bitmaps.c [iso-8859-1] Sat May 10 06:23:54 2008
@@ -43,22 +43,24 @@
    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;
-   }
+
+    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;
+    }
 
    WidthBytes = BITMAPOBJ_GetWidthBytes(Width, Planes * BitsPixel);
 
-   Size.cx = abs(Width);
-   Size.cy = abs(Height);
-
+   Size.cx = Width;
+   Size.cy = Height;
    /* Create the bitmap object. */
    hBitmap = IntCreateBitmap(Size, WidthBytes,
                              BitmapFormat(BitsPixel, BI_RGB),
@@ -112,14 +114,7 @@
          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
    {



More information about the Ros-diffs mailing list