From e6228f3ff67795858c791bb949e138f50b5866c0 Mon Sep 17 00:00:00 2001 From: Colin Snover Date: Sat, 11 Nov 2017 20:01:58 -0600 Subject: [PATCH] SCI32: Fix integer overflow calculating audio duration Due to the need to calculate the audio duration with millisecond precision from the file size, it is possible to overflow a 32-bit integer in games with long background audio loops, like RAMA, during the calculation of the duration. It is also not necessary to give some framerate here, so eliminate the unnecessary explicit Timestamp construction with the second argument. --- engines/sci/sound/decoders/sol.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/sci/sound/decoders/sol.cpp b/engines/sci/sound/decoders/sol.cpp index a6eb8a47b8e..b468e5ecf61 100644 --- a/engines/sci/sound/decoders/sol.cpp +++ b/engines/sci/sound/decoders/sol.cpp @@ -151,7 +151,7 @@ SOLStream::SOLStream(Common::SeekableReadStream *strea const uint8 compressionRatio = 2; const uint8 numChannels = STEREO ? 2 : 1; const uint8 bytesPerSample = S16BIT ? 2 : 1; - _length = Audio::Timestamp((_rawDataSize * compressionRatio * 1000) / (_sampleRate * numChannels * bytesPerSample), 60); + _length = ((uint64)_rawDataSize * compressionRatio * 1000) / (_sampleRate * numChannels * bytesPerSample); } template