From: Aida JonikienÄ— aidas957@gmail.com
GTA San Andreas calls this function with NaN positions under certain circumstances which eventually results in dwTotalAmpFactor value being really high (and causing extremely loud audio output). --- dlls/dsound/sound3d.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/dlls/dsound/sound3d.c b/dlls/dsound/sound3d.c index 3fa9ff6801f..2ee80a647d9 100644 --- a/dlls/dsound/sound3d.c +++ b/dlls/dsound/sound3d.c @@ -703,6 +703,9 @@ static HRESULT WINAPI IDirectSound3DBufferImpl_SetPosition(IDirectSound3DBuffer
TRACE("setting: Position vector = (%f,%f,%f); dwApply = %ld\n", x, y, z, dwApply);
+ if (isnan(x) || isnan(y) || isnan(z)) + return DSERR_INVALIDPARAM; + AcquireSRWLockExclusive(&This->lock);
This->ds3db_ds3db.vPosition.x = x;