[ros-diffs] [tkreuzer] 26485: - Fix BITMAP_GetObject() - NtGdiExtGetObjectW: return 0 if IntGdiGetObject returns 0

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Tue Apr 24 21:01:52 CEST 2007


Author: tkreuzer
Date: Tue Apr 24 23:01:52 2007
New Revision: 26485

URL: http://svn.reactos.org/svn/reactos?rev=26485&view=rev
Log:
- Fix BITMAP_GetObject()
- NtGdiExtGetObjectW: return 0 if IntGdiGetObject returns 0

Modified:
    trunk/reactos/subsystems/win32/win32k/objects/bitmaps.c
    trunk/reactos/subsystems/win32/win32k/objects/dc.c

Modified: trunk/reactos/subsystems/win32/win32k/objects/bitmaps.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/bitmaps.c?rev=26485&r1=26484&r2=26485&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/bitmaps.c (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/bitmaps.c Tue Apr 24 23:01:52 2007
@@ -1566,14 +1566,6 @@
 BITMAP_GetObject(BITMAPOBJ * bmp, INT Count, LPVOID buffer)
 {
 	if ((UINT)Count < sizeof(BITMAP)) return 0;
-	if( buffer == NULL )
-	{
-		if ((UINT)Count < sizeof(DIBSECTION))
-		{
-			return sizeof(BITMAP);
-		}
-		return sizeof(DIBSECTION);
-	}
 
 	if(bmp->dib)
 	{
@@ -1585,23 +1577,30 @@
 		{
 			Count = sizeof(DIBSECTION);
 		}
-		memcpy(buffer, bmp->dib, Count);
+		if (buffer)
+		{
+			memcpy(buffer, bmp->dib, Count);
+		}
 		return Count;
 	}
 	else
 	{
-		BITMAP Bitmap;
-
 		Count = sizeof(BITMAP);
-		Bitmap.bmType = 0;
-		Bitmap.bmWidth = bmp->SurfObj.sizlBitmap.cx;
-		Bitmap.bmHeight = bmp->SurfObj.sizlBitmap.cy;
-		Bitmap.bmWidthBytes = abs(bmp->SurfObj.lDelta);
-		Bitmap.bmPlanes = 1;
-		Bitmap.bmBitsPixel = BitsPerFormat(bmp->SurfObj.iBitmapFormat);
-		//Bitmap.bmBits = bmp->SurfObj.pvBits;
-		Bitmap.bmBits = NULL; /* not set accoring wine test confirm in win2k */
-		memcpy(buffer, &Bitmap, Count);
+		if (buffer)
+		{
+			BITMAP Bitmap;
+
+			Count = sizeof(BITMAP);
+			Bitmap.bmType = 0;
+			Bitmap.bmWidth = bmp->SurfObj.sizlBitmap.cx;
+			Bitmap.bmHeight = bmp->SurfObj.sizlBitmap.cy;
+			Bitmap.bmWidthBytes = abs(bmp->SurfObj.lDelta);
+			Bitmap.bmPlanes = 1;
+			Bitmap.bmBitsPixel = BitsPerFormat(bmp->SurfObj.iBitmapFormat);
+			//Bitmap.bmBits = bmp->SurfObj.pvBits;
+			Bitmap.bmBits = NULL; /* not set accoring wine test confirm in win2k */
+			memcpy(buffer, &Bitmap, Count);
+		}
 		return Count;
 	}
 }

Modified: trunk/reactos/subsystems/win32/win32k/objects/dc.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/dc.c?rev=26485&r1=26484&r2=26485&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/dc.c (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/dc.c Tue Apr 24 23:01:52 2007
@@ -1832,6 +1832,10 @@
   }
 
   RetCount = IntGdiGetObject(hGdiObj, cbCount, NULL);
+  if (!RetCount)
+  {
+    return 0;
+  }
   if ((UINT)cbCount > RetCount)
   {
     cbCount = RetCount;




More information about the Ros-diffs mailing list