Commit a257ba24 authored by Alexandre Julliard's avatar Alexandre Julliard

Avoid going past the end of the relocation section. Skip sanity checks

for empty relocation blocks.
parent 587cc122
......@@ -421,11 +421,14 @@ static int do_relocations( char *base, const IMAGE_NT_HEADERS *nt, const char *f
if ((nt->OptionalHeader.ImageBase & 0x80000000) && !((DWORD)base & 0x80000000))
ERR( "Forced to relocate system DLL (base > 2GB). This is not good.\n" );
while (rel->VirtualAddress)
for ( ; ((char *)rel < base + dir->VirtualAddress + dir->Size) && rel->VirtualAddress;
rel = (IMAGE_BASE_RELOCATION*)((char*)rel + rel->SizeOfBlock))
{
char *page = base + rel->VirtualAddress;
int i, count = (rel->SizeOfBlock - 8) / sizeof(rel->TypeOffset);
if (!count) continue;
/* sanity checks */
if ((char *)rel + rel->SizeOfBlock > base + dir->VirtualAddress + dir->Size ||
page > base + nt->OptionalHeader.SizeOfImage)
......@@ -462,7 +465,6 @@ static int do_relocations( char *base, const IMAGE_NT_HEADERS *nt, const char *f
break;
}
}
rel = (IMAGE_BASE_RELOCATION*)((char*)rel + rel->SizeOfBlock);
}
return 1;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment