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/ob…
==============================================================================
--- 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
{