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