dinput: Fix IDirectInputEffect::SetParameters() behavior with NULL effect parameters.

Signed-off-by: Brendan Shanks <bshanks@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Brendan Shanks 2020-03-25 16:31:30 -07:00 committed by Alexandre Julliard
parent f00b59f597
commit f66517b5a2
2 changed files with 7 additions and 3 deletions

View File

@ -499,6 +499,9 @@ static HRESULT WINAPI LinuxInputEffectImpl_SetParameters(
dump_DIEFFECT(peff, &This->guid, dwFlags);
if (dwFlags & DIEP_AXES) {
if (!(peff->rgdwAxes))
return DIERR_INVALIDPARAM;
/* the linux input effect system only supports one or two axes */
if (peff->cAxes > 2)
return DIERR_INVALIDPARAM;
@ -511,6 +514,9 @@ static HRESULT WINAPI LinuxInputEffectImpl_SetParameters(
* different opinions about which way direction "0" is. directx has 0 along the x
* axis (left), linux has it along the y axis (down). */
if (dwFlags & DIEP_DIRECTION) {
if (!(peff->rglDirection))
return DIERR_INVALIDPARAM;
if (peff->cAxes == 1) {
if (peff->dwFlags & DIEFF_CARTESIAN) {
if (dwFlags & DIEP_AXES) {
@ -629,7 +635,7 @@ static HRESULT WINAPI LinuxInputEffectImpl_SetParameters(
if (dwFlags & DIEP_TYPESPECIFICPARAMS)
{
if (!(peff->lpvTypeSpecificParams))
return DIERR_INCOMPLETEEFFECT;
return DIERR_INVALIDPARAM;
if (type == DIEFT_PERIODIC)
{

View File

@ -606,7 +606,6 @@ static BOOL CALLBACK EnumJoysticks(const DIDEVICEINSTANCEA *lpddi, void *pvRef)
ok(hr==DI_OK,"IDirectInputEffect_Initialize failed: %08x\n", hr);
/* Test SetParameters with NULL pointers */
todo_wine {
tmp = effect_data.eff.rgdwAxes;
effect_data.eff.rgdwAxes = NULL;
hr = IDirectInputEffect_SetParameters(effect, &effect_data.eff, DIEP_AXES);
@ -624,7 +623,6 @@ static BOOL CALLBACK EnumJoysticks(const DIDEVICEINSTANCEA *lpddi, void *pvRef)
hr = IDirectInputEffect_SetParameters(effect, &effect_data.eff, DIEP_TYPESPECIFICPARAMS);
ok(hr==DIERR_INVALIDPARAM,"IDirectInputEffect_SetParameters should fail with INVALIDPARAM, got: %08x\n", hr);
effect_data.eff.lpvTypeSpecificParams = tmp;
}
hr = IDirectInputEffect_SetParameters(effect, &effect_data.eff, DIEP_AXES | DIEP_DIRECTION |
DIEP_TYPESPECIFICPARAMS);