[PATCH v2 1/7] d3d11: Always initialize out shader pointer in CreateVertexShader().

Nikolay Sivov wine at gitlab.winehq.org
Fri May 27 09:23:17 CDT 2022


From: Nikolay Sivov <nsivov at codeweavers.com>

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/d3d10core/tests/d3d10core.c | 6 ++++++
 dlls/d3d11/device.c              | 4 ++++
 dlls/d3d11/tests/d3d11.c         | 6 ++++++
 3 files changed, 16 insertions(+)

diff --git a/dlls/d3d10core/tests/d3d10core.c b/dlls/d3d10core/tests/d3d10core.c
index 15f306f9559..3d8a5621a49 100644
--- a/dlls/d3d10core/tests/d3d10core.c
+++ b/dlls/d3d10core/tests/d3d10core.c
@@ -3890,14 +3890,20 @@ void main(point float4 vin[1] : POSITION, inout TriangleStream<gs_out> vout)
     refcount = ID3D10VertexShader_Release(vs);
     ok(!refcount, "Vertex shader has %u references left.\n", refcount);
 
+    vs = (void *)0xdeadbeef;
     hr = ID3D10Device_CreateVertexShader(device, vs_2_0, sizeof(vs_2_0), &vs);
     ok(hr == E_INVALIDARG, "Created a SM2 vertex shader, hr %#x\n", hr);
+    ok(!vs, "Unexpected pointer %p.\n", vs);
 
+    vs = (void *)0xdeadbeef;
     hr = ID3D10Device_CreateVertexShader(device, vs_3_0, sizeof(vs_3_0), &vs);
     ok(hr == E_INVALIDARG, "Created a SM3 vertex shader, hr %#x\n", hr);
+    ok(!vs, "Unexpected pointer %p.\n", vs);
 
+    vs = (void *)0xdeadbeef;
     hr = ID3D10Device_CreateVertexShader(device, ps_4_0, sizeof(ps_4_0), &vs);
     ok(hr == E_INVALIDARG, "Created a SM4 vertex shader from a pixel shader source, hr %#x\n", hr);
+    ok(!vs, "Unexpected pointer %p.\n", vs);
 
     /* pixel shader */
     expected_refcount = get_refcount(device) + 1;
diff --git a/dlls/d3d11/device.c b/dlls/d3d11/device.c
index 263613911f8..c1207bf7bc9 100644
--- a/dlls/d3d11/device.c
+++ b/dlls/d3d11/device.c
@@ -3469,6 +3469,8 @@ static HRESULT STDMETHODCALLTYPE d3d11_device_CreateVertexShader(ID3D11Device2 *
     TRACE("iface %p, byte_code %p, byte_code_length %Iu, class_linkage %p, shader %p.\n",
             iface, byte_code, byte_code_length, class_linkage, shader);
 
+    *shader = NULL;
+
     if (class_linkage)
         FIXME("Class linkage is not implemented yet.\n");
 
@@ -6176,6 +6178,8 @@ static HRESULT STDMETHODCALLTYPE d3d10_device_CreateVertexShader(ID3D10Device1 *
     TRACE("iface %p, byte_code %p, byte_code_length %Iu, shader %p.\n",
             iface, byte_code, byte_code_length, shader);
 
+    *shader = NULL;
+
     if (FAILED(hr = d3d_vertex_shader_create(device, byte_code, byte_code_length, &object)))
         return hr;
 
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c
index 8225237568f..7ba39cc3447 100644
--- a/dlls/d3d11/tests/d3d11.c
+++ b/dlls/d3d11/tests/d3d11.c
@@ -4849,14 +4849,20 @@ static void test_create_shader(const D3D_FEATURE_LEVEL feature_level)
     ID3D11PixelShader_Release(ps);
 
     /* vertex shader */
+    vs = (void *)0xdeadbeef;
     hr = ID3D11Device_CreateVertexShader(device, vs_2_0, sizeof(vs_2_0), NULL, &vs);
     ok(hr == E_INVALIDARG, "Feature level %#x: Got unexpected hr %#lx.\n", feature_level, hr);
+    ok(!vs, "Unexpected pointer %p.\n", vs);
 
+    vs = (void *)0xdeadbeef;
     hr = ID3D11Device_CreateVertexShader(device, vs_3_0, sizeof(vs_3_0), NULL, &vs);
     ok(hr == E_INVALIDARG, "Feature level %#x: Got unexpected hr %#lx.\n", feature_level, hr);
+    ok(!vs, "Unexpected pointer %p.\n", vs);
 
+    vs = (void *)0xdeadbeef;
     hr = ID3D11Device_CreateVertexShader(device, ps_4_0, sizeof(ps_4_0), NULL, &vs);
     ok(hr == E_INVALIDARG, "Feature level %#x: Got unexpected hr %#lx.\n", feature_level, hr);
+    ok(!vs, "Unexpected pointer %p.\n", vs);
 
     expected_refcount = get_refcount(device) + (feature_level >= D3D_FEATURE_LEVEL_10_0);
     hr = ID3D11Device_CreateVertexShader(device, vs_4_0, sizeof(vs_4_0), NULL, &vs);
-- 
GitLab


https://gitlab.winehq.org/wine/wine/-/merge_requests/141



More information about the wine-devel mailing list