[PATCH] winealsa/wineoss/winecoreaudio: calculate frequency in 64bit (Coverity)

Marcus Meissner marcus at jet.franken.de
Tue Jun 17 01:30:42 CDT 2014


1223059 Unintentional integer overflow

The expression's value may not be what the programmer intended, because
the expression is evaluated using a narrow (i.e. few bits) integer type.

In AudioClock_GetFrequency: An integer overflow occurs, with the result
converted to a wider integer type (CWE-190)

(Basically 32bit integer * 32bit integer is calculated as a 32bit integer
 and does not autoextend to 64bit integer. Cast one part to make it
 calculate in 64bit.)
---
 dlls/winealsa.drv/mmdevdrv.c      | 2 +-
 dlls/winecoreaudio.drv/mmdevdrv.c | 2 +-
 dlls/wineoss.drv/mmdevdrv.c       | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c
index 5e40d6e..7d41110 100644
--- a/dlls/winealsa.drv/mmdevdrv.c
+++ b/dlls/winealsa.drv/mmdevdrv.c
@@ -2823,7 +2823,7 @@ static HRESULT WINAPI AudioClock_GetFrequency(IAudioClock *iface, UINT64 *freq)
     TRACE("(%p)->(%p)\n", This, freq);
 
     if(This->share == AUDCLNT_SHAREMODE_SHARED)
-        *freq = This->fmt->nSamplesPerSec * This->fmt->nBlockAlign;
+        *freq = (UINT64)This->fmt->nSamplesPerSec * This->fmt->nBlockAlign;
     else
         *freq = This->fmt->nSamplesPerSec;
 
diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c
index 6603075..81816ca 100644
--- a/dlls/winecoreaudio.drv/mmdevdrv.c
+++ b/dlls/winecoreaudio.drv/mmdevdrv.c
@@ -2421,7 +2421,7 @@ static HRESULT WINAPI AudioClock_GetFrequency(IAudioClock *iface, UINT64 *freq)
     TRACE("(%p)->(%p)\n", This, freq);
 
     if(This->share == AUDCLNT_SHAREMODE_SHARED)
-        *freq = This->fmt->nSamplesPerSec * This->fmt->nBlockAlign;
+        *freq = (UINT64)This->fmt->nSamplesPerSec * This->fmt->nBlockAlign;
     else
         *freq = This->fmt->nSamplesPerSec;
 
diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c
index dd45fba..1e0e116 100644
--- a/dlls/wineoss.drv/mmdevdrv.c
+++ b/dlls/wineoss.drv/mmdevdrv.c
@@ -2146,7 +2146,7 @@ static HRESULT WINAPI AudioClock_GetFrequency(IAudioClock *iface, UINT64 *freq)
     TRACE("(%p)->(%p)\n", This, freq);
 
     if(This->share == AUDCLNT_SHAREMODE_SHARED)
-        *freq = This->fmt->nSamplesPerSec * This->fmt->nBlockAlign;
+        *freq = (UINT64)This->fmt->nSamplesPerSec * This->fmt->nBlockAlign;
     else
         *freq = This->fmt->nSamplesPerSec;
 
-- 
1.8.4.5




More information about the wine-patches mailing list