diff --git a/reactos/subsystems/win32/win32k/objects/bitmaps.c b/reactos/subsystems/win32/win32k/objects/bitmaps.c index 851e6895755..8100d9bfd31 100644 --- a/reactos/subsystems/win32/win32k/objects/bitmaps.c +++ b/reactos/subsystems/win32/win32k/objects/bitmaps.c @@ -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 {