From 608264fa22ee5f48d9fc92fafb97a73fd372b0f5 Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Sat, 10 May 2008 11:23:54 +0000 Subject: [PATCH] 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 --- .../subsystems/win32/win32k/objects/bitmaps.c | 29 ++++++++----------- 1 file changed, 12 insertions(+), 17 deletions(-) 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 {