=?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