[ros-diffs] [dchapyshev] 39882: - Add more check of parametres in GetDIBits

dchapyshev at svn.reactos.org dchapyshev at svn.reactos.org
Thu Mar 5 13:22:36 CET 2009


Author: dchapyshev
Date: Thu Mar  5 15:22:35 2009
New Revision: 39882

URL: http://svn.reactos.org/svn/reactos?rev=39882&view=rev
Log:
- Add more check of parametres in GetDIBits

Modified:
    trunk/reactos/dll/win32/gdi32/objects/bitmap.c

Modified: trunk/reactos/dll/win32/gdi32/objects/bitmap.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdi32/objects/bitmap.c?rev=39882&r1=39881&r2=39882&view=diff
==============================================================================
--- trunk/reactos/dll/win32/gdi32/objects/bitmap.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/gdi32/objects/bitmap.c [iso-8859-1] Thu Mar  5 15:22:35 2009
@@ -418,7 +418,13 @@
            }
         }
      }
-     pvSafeBits = RtlAllocateHeap(GetProcessHeap(), 0, cjBmpScanSize);
+
+     if ((ULONG)lpvBits & (sizeof(DWORD) - 1))
+     {
+         pvSafeBits = RtlAllocateHeap(RtlGetProcessHeap(), 0, cjBmpScanSize);
+         if (!pvSafeBits)
+            return Ret;
+     }
   }
 
   Ret = NtGdiGetDIBitsInternal(hDC,
@@ -430,9 +436,12 @@
                                uUsage,
                                cjBmpScanSize,
                                0);
-  if ( lpvBits != pvSafeBits)
-  {
-     RtlCopyMemory( lpvBits, pvSafeBits, cjBmpScanSize);
+  if (lpvBits != pvSafeBits)
+  {
+     if (Ret)
+     {
+        RtlCopyMemory(lpvBits, pvSafeBits, cjBmpScanSize);
+     }
      RtlFreeHeap(RtlGetProcessHeap(), 0, pvSafeBits);
   }
   return Ret;



More information about the Ros-diffs mailing list