[PATCH] d3dx10: Handle null filename for W->A conversion explicitly in D3DX10CreateEffectFromResourceW().

Nikolay Sivov nsivov at codeweavers.com
Thu Sep 9 03:22:41 CDT 2021


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/d3dx10_43/compiler.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/dlls/d3dx10_43/compiler.c b/dlls/d3dx10_43/compiler.c
index 2a306fa8f57..0083ab267f1 100644
--- a/dlls/d3dx10_43/compiler.c
+++ b/dlls/d3dx10_43/compiler.c
@@ -176,7 +176,7 @@ HRESULT WINAPI D3DX10CreateEffectFromResourceW(HMODULE module, const WCHAR *reso
         ID3D10EffectPool *effect_pool, ID3DX10ThreadPump *pump, ID3D10Effect **effect,
         ID3D10Blob **errors, HRESULT *hresult)
 {
-    char *filename;
+    char *filename = NULL;
     HRSRC resinfo;
     void *data;
     DWORD size;
@@ -195,10 +195,13 @@ HRESULT WINAPI D3DX10CreateEffectFromResourceW(HMODULE module, const WCHAR *reso
     if (FAILED(hr = get_resource_data(module, resinfo, &data, &size)))
         return hr;
 
-    len = WideCharToMultiByte(CP_ACP, 0, filenameW, -1, NULL, 0, NULL, NULL);
-    if (!(filename = heap_alloc(len)))
-        return E_OUTOFMEMORY;
-    WideCharToMultiByte(CP_ACP, 0, filenameW, -1, filename, len, NULL, NULL);
+    if (filenameW)
+    {
+        len = WideCharToMultiByte(CP_ACP, 0, filenameW, -1, NULL, 0, NULL, NULL);
+        if (!(filename = heap_alloc(len)))
+            return E_OUTOFMEMORY;
+        WideCharToMultiByte(CP_ACP, 0, filenameW, -1, filename, len, NULL, NULL);
+    }
 
     hr = D3DX10CreateEffectFromMemory(data, size, filename, defines, include, profile,
             shader_flags, effect_flags, device, effect_pool, pump, effect, errors, hresult);
-- 
2.33.0




More information about the wine-devel mailing list