ntdll: Round PE header size to a page boundary for size checks.

This commit is contained in:
Alexandre Julliard 2006-01-13 13:52:07 +01:00
parent 2cdace2760
commit eca9e4449c
1 changed files with 4 additions and 4 deletions

View File

@ -838,7 +838,7 @@ static NTSTATUS map_image( HANDLE hmapping, int fd, char *base, SIZE_T total_siz
off_t pos;
struct stat st;
struct file_view *view = NULL;
char *ptr;
char *ptr, *header_end;
/* zero-map the whole range */
@ -870,10 +870,10 @@ static NTSTATUS map_image( HANDLE hmapping, int fd, char *base, SIZE_T total_siz
removable ) != STATUS_SUCCESS) goto error;
dos = (IMAGE_DOS_HEADER *)ptr;
nt = (IMAGE_NT_HEADERS *)(ptr + dos->e_lfanew);
if ((char *)(nt + 1) > ptr + header_size) goto error;
header_end = ptr + ROUND_SIZE( 0, header_size );
if ((char *)(nt + 1) > header_end) goto error;
sec = (IMAGE_SECTION_HEADER*)((char*)&nt->OptionalHeader+nt->FileHeader.SizeOfOptionalHeader);
if ((char *)(sec + nt->FileHeader.NumberOfSections) > ptr + header_size) goto error;
if ((char *)(sec + nt->FileHeader.NumberOfSections) > header_end) goto error;
imports = nt->OptionalHeader.DataDirectory + IMAGE_DIRECTORY_ENTRY_IMPORT;
if (!imports->Size || !imports->VirtualAddress) imports = NULL;