=?UTF-8?Q?Rico=20Sch=C3=BCller=20?=: d3dx9: Handle invalid byte code in D3DXGetShaderConstantTableEx().

Alexandre Julliard julliard at winehq.org
Tue Jan 8 13:58:43 CST 2013


Module: wine
Branch: master
Commit: 6cb430102117b21fa96009c774af9e5c99e61777
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6cb430102117b21fa96009c774af9e5c99e61777

Author: Rico Schüller <kgbricola at web.de>
Date:   Mon Jan  7 21:57:18 2013 +0100

d3dx9: Handle invalid byte code in D3DXGetShaderConstantTableEx().

---

 dlls/d3dx9_36/shader.c       |    6 ++++++
 dlls/d3dx9_36/tests/shader.c |   15 +++++++++++++++
 2 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/dlls/d3dx9_36/shader.c b/dlls/d3dx9_36/shader.c
index e266fe2..81c8323 100644
--- a/dlls/d3dx9_36/shader.c
+++ b/dlls/d3dx9_36/shader.c
@@ -1639,6 +1639,12 @@ HRESULT WINAPI D3DXGetShaderConstantTableEx(const DWORD *byte_code, DWORD flags,
         return D3DERR_INVALIDCALL;
     }
 
+    if (!is_valid_bytecode(*byte_code))
+    {
+        WARN("Invalid byte_code specified.\n");
+        return D3D_OK;
+    }
+
     if (flags) FIXME("Flags (%#x) are not handled, yet!\n", flags);
 
     hr = D3DXFindShaderComment(byte_code, MAKEFOURCC('C','T','A','B'), &data, &size);
diff --git a/dlls/d3dx9_36/tests/shader.c b/dlls/d3dx9_36/tests/shader.c
index fb8f270..f7be174 100644
--- a/dlls/d3dx9_36/tests/shader.c
+++ b/dlls/d3dx9_36/tests/shader.c
@@ -366,6 +366,21 @@ static void test_get_shader_constant_table_ex(void)
     ok(hr == D3DERR_INVALIDCALL, "Got result %x, expected %x (D3DERR_INVALIDCALL)\n", hr, D3DERR_INVALIDCALL);
     ok(constant_table == NULL, "D3DXGetShaderConstantTableEx() failed, got %p\n", constant_table);
 
+    constant_table = (ID3DXConstantTable *)0xdeadbeef;
+    hr = D3DXGetShaderConstantTableEx(shader_zero, 0, &constant_table);
+    ok(hr == D3D_OK, "Got result %x, expected %x (D3D_OK)\n", hr, D3D_OK);
+    ok(constant_table == NULL, "D3DXGetShaderConstantTableEx() failed, got %p\n", constant_table);
+
+    constant_table = (ID3DXConstantTable *)0xdeadbeef;
+    hr = D3DXGetShaderConstantTableEx(shader_invalid, 0, &constant_table);
+    ok(hr == D3D_OK, "Got result %x, expected %x (D3D_OK)\n", hr, D3D_OK);
+    ok(constant_table == NULL, "D3DXGetShaderConstantTableEx() failed, got %p\n", constant_table);
+
+    constant_table = (ID3DXConstantTable *)0xdeadbeef;
+    hr = D3DXGetShaderConstantTableEx(shader_empty, 0, &constant_table);
+    ok(hr == D3DXERR_INVALIDDATA, "Got result %x, expected %x (D3DXERR_INVALIDDATA)\n", hr, D3DXERR_INVALIDDATA);
+    ok(constant_table == NULL, "D3DXGetShaderConstantTableEx() failed, got %p\n", constant_table);
+
     /* No CTAB data */
     constant_table = (ID3DXConstantTable *)0xdeadbeef;
     hr = D3DXGetShaderConstantTableEx(simple_ps, 0, &constant_table);




More information about the wine-cvs mailing list