Andrew Eikum : winmm: Allow larger MMTIME sizes.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Dec 15 15:32:06 CST 2014


Module: wine
Branch: master
Commit: cba322d71d317bc52e9de5a057723bf5d6dc1e86
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=cba322d71d317bc52e9de5a057723bf5d6dc1e86

Author: Andrew Eikum <aeikum at codeweavers.com>
Date:   Mon Dec 15 10:21:52 2014 -0600

winmm: Allow larger MMTIME sizes.

---

 dlls/winmm/tests/wave.c |  7 ++++++-
 dlls/winmm/waveform.c   | 10 ++++++++--
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/dlls/winmm/tests/wave.c b/dlls/winmm/tests/wave.c
index d370461..4dcc577 100644
--- a/dlls/winmm/tests/wave.c
+++ b/dlls/winmm/tests/wave.c
@@ -487,7 +487,12 @@ static void check_position(int device, HWAVEOUT wout, DWORD bytes,
     DWORD returned;
 
     mmtime.wType = TIME_BYTES;
-    rc=waveOutGetPosition(wout, &mmtime, sizeof(mmtime));
+    rc=waveOutGetPosition(wout, &mmtime, sizeof(mmtime) - 1);
+    ok(rc==MMSYSERR_ERROR,
+       "waveOutGetPosition(%s): rc=%s\n",dev_name(device),wave_out_error(rc));
+
+    mmtime.wType = TIME_BYTES;
+    rc=waveOutGetPosition(wout, &mmtime, sizeof(mmtime) + 1);
     ok(rc==MMSYSERR_NOERROR,
        "waveOutGetPosition(%s): rc=%s\n",dev_name(device),wave_out_error(rc));
     if (mmtime.wType != TIME_BYTES && winetest_debug > 1)
diff --git a/dlls/winmm/waveform.c b/dlls/winmm/waveform.c
index 32083b8..f381c16 100644
--- a/dlls/winmm/waveform.c
+++ b/dlls/winmm/waveform.c
@@ -2981,9 +2981,12 @@ UINT WINAPI waveOutGetPosition(HWAVEOUT hWaveOut, LPMMTIME lpTime,
 {
     TRACE("(%p, %p, %u)\n", hWaveOut, lpTime, uSize);
 
-    if(!uSize || !lpTime || uSize != sizeof(MMTIME))
+    if(!uSize || !lpTime)
         return MMSYSERR_INVALPARAM;
 
+    if(uSize < sizeof(MMTIME))
+        return MMSYSERR_ERROR;
+
     return WINMM_GetPosition((HWAVE)hWaveOut, lpTime);
 }
 
@@ -3602,9 +3605,12 @@ UINT WINAPI waveInGetPosition(HWAVEIN hWaveIn, LPMMTIME lpTime,
 {
     TRACE("(%p, %p, %u)\n", hWaveIn, lpTime, uSize);
 
-    if(!uSize || !lpTime || uSize != sizeof(MMTIME))
+    if(!uSize || !lpTime)
         return MMSYSERR_INVALPARAM;
 
+    if(uSize < sizeof(MMTIME))
+        return MMSYSERR_ERROR;
+
     return WINMM_GetPosition((HWAVE)hWaveIn, lpTime);
 }
 




More information about the wine-cvs mailing list