mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-01 15:43:37 +00:00
d3d10: Handle invalid arguments for effect creation.
Passing NULL data to D3D10CreateEffectFromMemory crashes. Passing NULL data to D3D10CreateEffectPoolFromMemory returns E_INVALIDARG.
This commit is contained in:
parent
6c4f9ec527
commit
bd5cdef5dd
|
@ -9537,6 +9537,9 @@ static HRESULT d3d10_create_effect(void *data, SIZE_T data_size, ID3D10Device *d
|
||||||
struct d3d10_effect *object;
|
struct d3d10_effect *object;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
|
if (!device)
|
||||||
|
return D3DERR_INVALIDCALL;
|
||||||
|
|
||||||
if (!(object = calloc(1, sizeof(*object))))
|
if (!(object = calloc(1, sizeof(*object))))
|
||||||
return E_OUTOFMEMORY;
|
return E_OUTOFMEMORY;
|
||||||
|
|
||||||
|
@ -9636,6 +9639,9 @@ HRESULT WINAPI D3D10CreateEffectPoolFromMemory(void *data, SIZE_T data_size, UIN
|
||||||
TRACE("data %p, data_size %Iu, fx_flags %#x, device %p, effect_pool %p.\n",
|
TRACE("data %p, data_size %Iu, fx_flags %#x, device %p, effect_pool %p.\n",
|
||||||
data, data_size, fx_flags, device, effect_pool);
|
data, data_size, fx_flags, device, effect_pool);
|
||||||
|
|
||||||
|
if (!data)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
if (FAILED(hr = d3d10_create_effect(data, data_size, device, NULL,
|
if (FAILED(hr = d3d10_create_effect(data, data_size, device, NULL,
|
||||||
D3D10_EFFECT_IS_POOL, &object)))
|
D3D10_EFFECT_IS_POOL, &object)))
|
||||||
{
|
{
|
||||||
|
|
|
@ -118,11 +118,8 @@ static void test_effect_constant_buffer_type(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(winetest_platform, "wine")) /* Crash on wine. */
|
|
||||||
{
|
|
||||||
hr = create_effect(fx_test_ecbt, 0, NULL, NULL, &effect);
|
hr = create_effect(fx_test_ecbt, 0, NULL, NULL, &effect);
|
||||||
ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#lx.\n", hr);
|
ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#lx.\n", hr);
|
||||||
}
|
|
||||||
|
|
||||||
hr = create_effect(fx_test_ecbt, 0, device, NULL, &effect);
|
hr = create_effect(fx_test_ecbt, 0, device, NULL, &effect);
|
||||||
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
|
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
|
||||||
|
@ -7120,14 +7117,10 @@ static void test_effect_pool(void)
|
||||||
ok(!!device2, "Failed to create d3d device.\n");
|
ok(!!device2, "Failed to create d3d device.\n");
|
||||||
|
|
||||||
hr = D3D10CreateEffectPoolFromMemory(NULL, 0, 0, device, &pool);
|
hr = D3D10CreateEffectPoolFromMemory(NULL, 0, 0, device, &pool);
|
||||||
todo_wine
|
|
||||||
ok(hr == E_INVALIDARG, "Got unexpected hr %#lx.\n", hr);
|
ok(hr == E_INVALIDARG, "Got unexpected hr %#lx.\n", hr);
|
||||||
|
|
||||||
if (strcmp(winetest_platform, "wine")) /* Crash on wine. */
|
|
||||||
{
|
|
||||||
hr = create_effect_pool(fx_test_pool, NULL, &pool);
|
hr = create_effect_pool(fx_test_pool, NULL, &pool);
|
||||||
ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#lx.\n", hr);
|
ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#lx.\n", hr);
|
||||||
}
|
|
||||||
|
|
||||||
hr = create_effect_pool(fx_test_pool, device, &pool);
|
hr = create_effect_pool(fx_test_pool, device, &pool);
|
||||||
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
|
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
|
||||||
|
|
Loading…
Reference in a new issue