PE_MESSAGE_HEADER.Length contains the header itself too.
diff --git a/dlls/kernel/format_msg.c b/dlls/kernel/format_msg.c
index a34df8d..53a4733 100644
--- a/dlls/kernel/format_msg.c
+++ b/dlls/kernel/format_msg.c
@@ -34,7 +34,7 @@
* 8: DWORD offset from start to the stringentries
*
* (lastentry-firstentry) * stringentry:
- * 0: WORD len (0 marks end)
+ * 0: WORD len (0 marks end) [ includes the 4 byte header length ]
* 2: WORD flags
* 4: CHAR[len-4]
* (stringentry i of a subentry refers to the ID 'firstentry+i')
@@ -79,7 +79,7 @@
for (i=id;i--;) {
if (!mre->Length)
return 0;
- mre = (PMESSAGE_RESOURCE_ENTRY)(((char*)mre)+(mre->Length)+2*sizeof(USHORT));
+ mre = (PMESSAGE_RESOURCE_ENTRY)(((char*)mre)+mre->Length);
}
slen=mre->Length;
TRACE(" - strlen=%d\n",slen);