From a6f2c003a3ec264132b7a92415924aff817a0c56 Mon Sep 17 00:00:00 2001 From: Misha Koshelev Date: Wed, 22 Sep 2010 18:42:48 -0500 Subject: [PATCH] d3dx9_36: D3DXDeclaratorFromFVF returns D3DERR_INVALIDCALL when an invalid declarator is passed. --- dlls/d3dx9_36/mesh.c | 2 ++ dlls/d3dx9_36/tests/mesh.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/dlls/d3dx9_36/mesh.c b/dlls/d3dx9_36/mesh.c index 844d521f8d..166000fdb1 100644 --- a/dlls/d3dx9_36/mesh.c +++ b/dlls/d3dx9_36/mesh.c @@ -559,6 +559,8 @@ HRESULT WINAPI D3DXDeclaratorFromFVF(DWORD fvf, D3DVERTEXELEMENT9 declaration[MA TRACE("fvf %#x, declaration %p.\n", fvf, declaration); + if (fvf & (D3DFVF_RESERVED0 | D3DFVF_RESERVED2)) return D3DERR_INVALIDCALL; + if (fvf & D3DFVF_POSITION_MASK) { BOOL has_blend = (fvf & D3DFVF_XYZB5) >= D3DFVF_XYZB1; diff --git a/dlls/d3dx9_36/tests/mesh.c b/dlls/d3dx9_36/tests/mesh.c index 05df51ec82..c55a3c73f3 100644 --- a/dlls/d3dx9_36/tests/mesh.c +++ b/dlls/d3dx9_36/tests/mesh.c @@ -836,6 +836,8 @@ static void test_fvf_decl_conversion(void) }; test_decl_to_fvf(decl, 0, D3DERR_INVALIDCALL, __LINE__, 0); } + /* Invalid FVFs cannot be converted to a declarator. */ + test_fvf_to_decl(0xdeadbeef, NULL, D3DERR_INVALIDCALL, __LINE__, 0); } static void D3DXGetFVFVertexSizeTest(void)