From 4ca7e6343f9435e7fdb2b74d746014fe00a1a81f Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@sloboda.ru>
Date: Tue, 26 Sep 2000 00:39:06 +0000
Subject: [PATCH] Avoid crashes if 16-bit module handle was passed to the
 32-bit resource enumerator.

---
 loader/pe_resource.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/loader/pe_resource.c b/loader/pe_resource.c
index 3dce489dde4..95af38d9b9b 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 @@ static IMAGE_RESOURCE_DIRECTORY* get_resdir( HMODULE hmod )
     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);
-- 
GitLab