Module: wine Branch: master Commit: 4a59ac76f19c6df4a32b88584a2488ce6f659ccc URL: http://source.winehq.org/git/wine.git/?a=commit;h=4a59ac76f19c6df4a32b88584a...
Author: Alexandre Julliard julliard@winehq.org Date: Wed Aug 12 15:47:57 2009 +0200
kernel32: Check for a 32-bit NT header before getting module address range in MODULE_GetBinaryType.
---
dlls/kernel32/module.c | 15 +++++++++++++-- 1 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/dlls/kernel32/module.c b/dlls/kernel32/module.c index 4d0a810..f93580c 100644 --- a/dlls/kernel32/module.c +++ b/dlls/kernel32/module.c @@ -282,7 +282,7 @@ DWORD MODULE_GetBinaryType( HANDLE hfile, void **res_start, void **res_end ) union { IMAGE_OS2_HEADER os2; - IMAGE_NT_HEADERS nt; + IMAGE_NT_HEADERS32 nt; } ext_header;
/* We do have a DOS image so we will now try to seek into @@ -311,7 +311,18 @@ DWORD MODULE_GetBinaryType( HANDLE hfile, void **res_start, void **res_end ) if (res_start) *res_start = (void *)ext_header.nt.OptionalHeader.ImageBase; if (res_end) *res_end = (void *)(ext_header.nt.OptionalHeader.ImageBase + ext_header.nt.OptionalHeader.SizeOfImage); - return ret; + switch (ext_header.nt.OptionalHeader.Magic) + { + case IMAGE_NT_OPTIONAL_HDR32_MAGIC: + if (res_start) *res_start = (void *)ext_header.nt.OptionalHeader.ImageBase; + if (res_end) *res_end = (void *)(ext_header.nt.OptionalHeader.ImageBase + + ext_header.nt.OptionalHeader.SizeOfImage); + return ret; + case IMAGE_NT_OPTIONAL_HDR64_MAGIC: + if (res_start) *res_start = NULL; + if (res_end) *res_end = NULL; + return ret; + } } return BINARY_DOS; }