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:
Ziqing Hui 2022-09-01 12:39:06 +08:00 committed by Alexandre Julliard
parent 6c4f9ec527
commit bd5cdef5dd
2 changed files with 6 additions and 7 deletions

View file

@ -9537,6 +9537,9 @@ static HRESULT d3d10_create_effect(void *data, SIZE_T data_size, ID3D10Device *d
struct d3d10_effect *object;
HRESULT hr;
if (!device)
return D3DERR_INVALIDCALL;
if (!(object = calloc(1, sizeof(*object))))
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",
data, data_size, fx_flags, device, effect_pool);
if (!data)
return E_INVALIDARG;
if (FAILED(hr = d3d10_create_effect(data, data_size, device, NULL,
D3D10_EFFECT_IS_POOL, &object)))
{

View file

@ -118,11 +118,8 @@ static void test_effect_constant_buffer_type(void)
return;
}
if (strcmp(winetest_platform, "wine")) /* Crash on wine. */
{
hr = create_effect(fx_test_ecbt, 0, NULL, NULL, &effect);
ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#lx.\n", hr);
}
hr = create_effect(fx_test_ecbt, 0, device, NULL, &effect);
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");
hr = D3D10CreateEffectPoolFromMemory(NULL, 0, 0, device, &pool);
todo_wine
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);
ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#lx.\n", hr);
}
hr = create_effect_pool(fx_test_pool, device, &pool);
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);