Fix the fix to RtlFindMessage
authorGé van Geldorp <ge@gse.nl>
Mon, 28 Nov 2005 23:21:24 +0000 (23:21 +0000)
committerGé van Geldorp <ge@gse.nl>
Mon, 28 Nov 2005 23:21:24 +0000 (23:21 +0000)
svn path=/trunk/; revision=19731

reactos/lib/kernel32/misc/errormsg.c
reactos/lib/rtl/message.c

index 71c2a71..1862cdc 100644 (file)
@@ -383,7 +383,7 @@ DWORD WINAPI FormatMessageW(
     LPWSTR from,f;
     DWORD width = dwFlags & FORMAT_MESSAGE_MAX_WIDTH_MASK;
     BOOL eos = FALSE;
-    CHAR ch;
+    WCHAR ch;
 
     TRACE("(0x%lx,%p,%ld,0x%lx,%p,%ld,%p)\n",
           dwFlags,lpSource,dwMessageId,dwLanguageId,lpBuffer,nSize,args);
index bb78671..c753029 100644 (file)
@@ -85,17 +85,20 @@ RtlFindMessage(PVOID BaseAddress,
          }
      }
 
+   if (MessageTable->NumberOfBlocks <= i)
+     {
+       return STATUS_MESSAGE_NOT_FOUND;
+     }
+
    MessageEntry = (PRTL_MESSAGE_RESOURCE_ENTRY)((PUCHAR)MessageTable + MessageTable->Blocks[i].OffsetToEntries);
 
    DPRINT("EntryOffset 0x%08lx\n", EntryOffset);
    DPRINT("IdOffset 0x%08lx\n", IdOffset);
 
    DPRINT("MessageEntry: %p\n", MessageEntry);
-   
-   for (i = 0; i < MessageTable->NumberOfBlocks; i++)
+   for (i = 0; i < IdOffset; i++)
      {
-         if (MessageId >= MessageTable->Blocks[i].LowId && MessageId <= MessageTable->Blocks[i].HighId)
-               MessageEntry = (PRTL_MESSAGE_RESOURCE_ENTRY)((char *)MessageEntry + MessageEntry->Length);
+       MessageEntry = (PRTL_MESSAGE_RESOURCE_ENTRY)((PUCHAR)MessageEntry + (ULONG)MessageEntry->Length);
      }
 
    if (MessageEntry->Flags == 0)