Avoid crashes if 16-bit module handle was passed to the 32-bit
resource enumerator.
diff --git a/loader/pe_resource.c b/loader/pe_resource.c
index 3dce489..95af38d 100644
--- a/loader/pe_resource.c
+++ b/loader/pe_resource.c
@@ -12,10 +12,12 @@
#include <stdlib.h>
#include <sys/types.h>
+
#include "wine/winestring.h"
#include "wine/unicode.h"
#include "windef.h"
#include "winnls.h"
+#include "winerror.h"
#include "module.h"
#include "heap.h"
#include "task.h"
@@ -24,6 +26,8 @@
#include "neexe.h"
#include "debugtools.h"
+DEFAULT_DEBUG_CHANNEL(resource);
+
/**********************************************************************
* get_resdir
*
@@ -35,6 +39,12 @@
IMAGE_RESOURCE_DIRECTORY *ret = NULL;
if (!hmod) hmod = GetModuleHandleA( NULL );
+ else if (!HIWORD(hmod))
+ {
+ FIXME("Enumeration of 16-bit resources is not supported\n");
+ SetLastError(ERROR_INVALID_HANDLE);
+ return NULL;
+ }
dir = &PE_HEADER(hmod)->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE];
if (dir->Size && dir->VirtualAddress)
ret = (IMAGE_RESOURCE_DIRECTORY *)((char *)hmod + dir->VirtualAddress);