winmm: Don't crash in waveOutOpen when nSamplesPerSec is 0 and add tests.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45530 Signed-off-by: Fabian Maurer <dark.shadow4@web.de> Signed-off-by: Andrew Eikum <aeikum@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
9e516ba1db
commit
7000af5547
|
@ -1415,6 +1415,28 @@ static void wave_out_test_device(UINT_PTR device)
|
|||
} else
|
||||
trace("waveOutOpen(%s): 32 bit float samples not supported\n",
|
||||
dev_name(device));
|
||||
|
||||
/* Test invalid parameters */
|
||||
|
||||
format.wFormatTag = WAVE_FORMAT_PCM;
|
||||
format.nChannels = 1;
|
||||
format.nSamplesPerSec = 11025;
|
||||
format.nBlockAlign = 1;
|
||||
format.nAvgBytesPerSec = 11025 * 1;
|
||||
format.wBitsPerSample = 8;
|
||||
format.cbSize = 0;
|
||||
|
||||
format.nAvgBytesPerSec = 0;
|
||||
rc = waveOutOpen(&wout, device, &format, 0, 0, 0);
|
||||
ok(rc == MMSYSERR_NOERROR,
|
||||
"waveOutOpen(%s): returned %s\n",dev_name(device),wave_out_error(rc));
|
||||
waveOutClose(wout);
|
||||
format.nAvgBytesPerSec = 11025 * 1;
|
||||
|
||||
format.nSamplesPerSec = 0;
|
||||
rc = waveOutOpen(&wout, device, &format, 0, 0, 0);
|
||||
ok(rc == MMSYSERR_INVALPARAM || rc == WAVERR_BADFORMAT, /* XP and lower return WAVERR_BADFORMAT */
|
||||
"waveOutOpen(%s): returned %s\n",dev_name(device),wave_out_error(rc));
|
||||
}
|
||||
|
||||
static void wave_out_tests(void)
|
||||
|
|
|
@ -1088,6 +1088,13 @@ static LRESULT WINMM_OpenDevice(WINMM_Device *device, WINMM_OpenInfo *info,
|
|||
}
|
||||
|
||||
if(info->format->wFormatTag == WAVE_FORMAT_PCM){
|
||||
|
||||
if (info->format->nSamplesPerSec == 0)
|
||||
{
|
||||
ret = MMSYSERR_INVALPARAM;
|
||||
goto error;
|
||||
}
|
||||
|
||||
/* we aren't guaranteed that the struct in lpFormat is a full
|
||||
* WAVEFORMATEX struct, which IAC::IsFormatSupported requires */
|
||||
device->orig_fmt = HeapAlloc(GetProcessHeap(), 0, sizeof(WAVEFORMATEX));
|
||||
|
|
Loading…
Reference in New Issue