From 327897992b83e77abe30d47eecf6d6b6d78d9cff Mon Sep 17 00:00:00 2001 From: Bruno Jesus <00cpxxx@gmail.com> Date: Mon, 22 Aug 2016 22:06:57 -0300 Subject: [PATCH] dinput: Do not read/write past the struct for old DX versions. Based on ideas by Elias Vanderstuyft. Signed-off-by: Bruno Jesus <00cpxxx@gmail.com> Signed-off-by: Alexandre Julliard --- dlls/dinput/effect_linuxinput.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dlls/dinput/effect_linuxinput.c b/dlls/dinput/effect_linuxinput.c index 2f3399d6671..642dfc06a79 100644 --- a/dlls/dinput/effect_linuxinput.c +++ b/dlls/dinput/effect_linuxinput.c @@ -329,9 +329,8 @@ static HRESULT WINAPI LinuxInputEffectImpl_GetParameters( peff->dwSamplePeriod = 0; } - if (dwFlags & DIEP_STARTDELAY) { - peff->dwStartDelay = This->effect.replay.delay * 1000; - } + if ((dwFlags & DIEP_STARTDELAY) && peff->dwSize > sizeof(DIEFFECT_DX5)) + peff->dwStartDelay = This->effect.replay.delay * 1000; if (dwFlags & DIEP_TRIGGERBUTTON) { FIXME("LinuxInput button mapping needs redoing; for now, assuming we're using an actual joystick.\n"); @@ -570,7 +569,8 @@ static HRESULT WINAPI LinuxInputEffectImpl_SetParameters( TRACE("Sample period requested but no sample period functionality present.\n"); if (dwFlags & DIEP_STARTDELAY) - This->effect.replay.delay = peff->dwStartDelay / 1000; + if ((dwFlags & DIEP_STARTDELAY) && peff->dwSize > sizeof(DIEFFECT_DX5)) + This->effect.replay.delay = peff->dwStartDelay / 1000; if (dwFlags & DIEP_TRIGGERBUTTON) { if (peff->dwTriggerButton != -1) {