[PATCH] mciqtz32: Don't overflow seek times during multiplication.

Lukáš Krejčí lskrejci at gmail.com
Wed May 29 01:42:10 CDT 2019


Seek times are of type REFERENCE_TIME (64-bit), but the multiplication
is done in DWORD (32-bit).

Signed-off-by: Lukáš Krejčí <lskrejci at gmail.com>
---
 dlls/mciqtz32/mciqtz.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/dlls/mciqtz32/mciqtz.c b/dlls/mciqtz32/mciqtz.c
index 1aec32635b..ec4a8b531a 100644
--- a/dlls/mciqtz32/mciqtz.c
+++ b/dlls/mciqtz32/mciqtz.c
@@ -422,20 +422,19 @@ static DWORD MCIQTZ_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms
     wma->mci_flags = dwFlags;
     IMediaSeeking_GetTimeFormat(wma->seek, &format);
     if (dwFlags & MCI_FROM) {
+        wma->seek_start = lpParms->dwFrom;
         if (IsEqualGUID(&format, &TIME_FORMAT_MEDIA_TIME))
-            wma->seek_start = lpParms->dwFrom * 10000;
-        else
-            wma->seek_start = lpParms->dwFrom;
+            wma->seek_start *= 10000;
+
         start_flags = AM_SEEKING_AbsolutePositioning;
     } else {
         wma->seek_start = 0;
         start_flags = AM_SEEKING_NoPositioning;
     }
     if (dwFlags & MCI_TO) {
+        wma->seek_stop = lpParms->dwTo;
         if (IsEqualGUID(&format, &TIME_FORMAT_MEDIA_TIME))
-            wma->seek_stop = lpParms->dwTo * 10000;
-        else
-            wma->seek_stop = lpParms->dwTo;
+            wma->seek_stop *= 10000;
     } else {
         wma->seek_stop = 0;
         IMediaSeeking_GetDuration(wma->seek, &wma->seek_stop);
-- 
2.21.0




More information about the wine-devel mailing list