mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-01-28 22:04:43 -08:00
69 lines
2.4 KiB
Diff
69 lines
2.4 KiB
Diff
From 65af7470de21a5d3b99ed8bc96f57d3f93012b56 Mon Sep 17 00:00:00 2001
|
|
From: Fabian Maurer <dark.shadow4@web.de>
|
|
Date: Fri, 3 Aug 2018 07:55:03 -0500
|
|
Subject: [PATCH] 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>
|
|
---
|
|
dlls/winmm/tests/wave.c | 22 ++++++++++++++++++++++
|
|
dlls/winmm/waveform.c | 7 +++++++
|
|
2 files changed, 29 insertions(+)
|
|
|
|
diff --git a/dlls/winmm/tests/wave.c b/dlls/winmm/tests/wave.c
|
|
index b402e21917..c106594b3f 100644
|
|
--- a/dlls/winmm/tests/wave.c
|
|
+++ b/dlls/winmm/tests/wave.c
|
|
@@ -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)
|
|
diff --git a/dlls/winmm/waveform.c b/dlls/winmm/waveform.c
|
|
index 045bf4ac20..0a259c0f74 100644
|
|
--- a/dlls/winmm/waveform.c
|
|
+++ b/dlls/winmm/waveform.c
|
|
@@ -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));
|
|
--
|
|
2.18.0
|
|
|