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



svn path=/trunk/; revision=33403
This commit is contained in:
Magnus Olsen 2008-05-10 11:23:54 +00:00
parent 7eab8b0750
commit 608264fa22

View 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;
}
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 @@ 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
{