Author: tkreuzer
Date: Sun Jun 24 13:39:32 2012
New Revision: 56794

URL: http://svn.reactos.org/svn/reactos?rev=56794&view=rev
Log:
[RTL]
Fix a mistake in RtlNumberOfSetBits, check for index out of range in 
RtlFindNextForwardRun*

Modified:
    trunk/reactos/lib/rtl/bitmap.c

Modified: trunk/reactos/lib/rtl/bitmap.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/bitmap.c?rev=56794&r1=56793&r2=56794&view=diff
==============================================================================
--- trunk/reactos/lib/rtl/bitmap.c [iso-8859-1] (original)
+++ trunk/reactos/lib/rtl/bitmap.c [iso-8859-1] Sun Jun 24 13:39:32 2012
@@ -421,7 +421,7 @@
     }
 
     Shift = 8 - (BitMapHeader->SizeOfBitMap & 7);
-    BitCount += BitCountTable[(*Byte) << Shift];
+    BitCount += BitCountTable[((*Byte) << Shift) & 0xFF];
 
     return BitCount;
 }
@@ -618,6 +618,13 @@
 {
     ULONG Length;
 
+    /* Check for buffer overrun */
+    if (FromIndex >= BitMapHeader->SizeOfBitMap)
+    {
+        *StartingRunIndex = FromIndex;
+        return 0;
+    }
+
     /* Assume a set run first, count it's length */
     Length = RtlpGetLengthOfRunSet(BitMapHeader, FromIndex, MAXULONG);
     *StartingRunIndex = FromIndex + Length;
@@ -634,6 +641,13 @@
     IN PULONG StartingRunIndex)
 {
     ULONG Length;
+
+    /* Check for buffer overrun */
+    if (FromIndex >= BitMapHeader->SizeOfBitMap)
+    {
+        *StartingRunIndex = FromIndex;
+        return 0;
+    }
 
     /* Assume a clear run first, count it's length */
     Length = RtlpGetLengthOfRunClear(BitMapHeader, FromIndex, MAXULONG);


Reply via email to