ddraw: Validate structure pointers and sizes in IDirect3D3::FindDevice.
This commit is contained in:
parent
cdad4e4af2
commit
10a076ad8d
|
@ -666,6 +666,13 @@ IDirect3DImpl_3_FindDevice(IDirect3D3 *iface,
|
||||||
|
|
||||||
TRACE("(%p)->(%p,%p)\n", This, D3DDFS, D3DFDR);
|
TRACE("(%p)->(%p,%p)\n", This, D3DDFS, D3DFDR);
|
||||||
|
|
||||||
|
if (!D3DDFS || !D3DFDR)
|
||||||
|
return DDERR_INVALIDPARAMS;
|
||||||
|
|
||||||
|
if (D3DDFS->dwSize != sizeof(D3DFINDDEVICESEARCH) ||
|
||||||
|
D3DFDR->dwSize != sizeof(D3DFINDDEVICERESULT))
|
||||||
|
return DDERR_INVALIDPARAMS;
|
||||||
|
|
||||||
if ((D3DDFS->dwFlags & D3DFDS_COLORMODEL) &&
|
if ((D3DDFS->dwFlags & D3DFDS_COLORMODEL) &&
|
||||||
(D3DDFS->dcmColorModel != D3DCOLOR_RGB))
|
(D3DDFS->dcmColorModel != D3DCOLOR_RGB))
|
||||||
{
|
{
|
||||||
|
|
|
@ -3391,6 +3391,40 @@ static void VertexBufferLockRest(void)
|
||||||
IDirect3DVertexBuffer7_Release(buffer);
|
IDirect3DVertexBuffer7_Release(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void FindDevice(void)
|
||||||
|
{
|
||||||
|
D3DFINDDEVICESEARCH search = {0};
|
||||||
|
D3DFINDDEVICERESULT result = {0};
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
/* Test invalid parameters. */
|
||||||
|
hr = IDirect3D_FindDevice(Direct3D1, NULL, NULL);
|
||||||
|
ok(hr == DDERR_INVALIDPARAMS,
|
||||||
|
"Expected IDirect3D1::FindDevice to return DDERR_INVALIDPARAMS, got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
hr = IDirect3D_FindDevice(Direct3D1, NULL, &result);
|
||||||
|
ok(hr == DDERR_INVALIDPARAMS,
|
||||||
|
"Expected IDirect3D1::FindDevice to return DDERR_INVALIDPARAMS, got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
hr = IDirect3D_FindDevice(Direct3D1, &search, NULL);
|
||||||
|
ok(hr == DDERR_INVALIDPARAMS,
|
||||||
|
"Expected IDirect3D1::FindDevice to return DDERR_INVALIDPARAMS, got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
search.dwSize = 0;
|
||||||
|
result.dwSize = 0;
|
||||||
|
|
||||||
|
hr = IDirect3D_FindDevice(Direct3D1, &search, &result);
|
||||||
|
ok(hr == DDERR_INVALIDPARAMS,
|
||||||
|
"Expected IDirect3D1::FindDevice to return DDERR_INVALIDPARAMS, got 0x%08x\n", hr);
|
||||||
|
|
||||||
|
search.dwSize = sizeof(search) + 1;
|
||||||
|
result.dwSize = sizeof(result) + 1;
|
||||||
|
|
||||||
|
hr = IDirect3D_FindDevice(Direct3D1, &search, &result);
|
||||||
|
ok(hr == DDERR_INVALIDPARAMS,
|
||||||
|
"Expected IDirect3D1::FindDevice to return DDERR_INVALIDPARAMS, got 0x%08x\n", hr);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(d3d)
|
START_TEST(d3d)
|
||||||
{
|
{
|
||||||
init_function_pointers();
|
init_function_pointers();
|
||||||
|
@ -3425,6 +3459,7 @@ START_TEST(d3d)
|
||||||
Direct3D1Test();
|
Direct3D1Test();
|
||||||
TextureLoadTest();
|
TextureLoadTest();
|
||||||
ViewportTest();
|
ViewportTest();
|
||||||
|
FindDevice();
|
||||||
D3D1_releaseObjects();
|
D3D1_releaseObjects();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue