From 122ba774e024bca0819bbaa56cdfa3c47dd49f0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Thu, 21 Nov 2019 10:01:01 +0100 Subject: Fix T71621: VSE crashes when playing last frame of audio Due to some floating point errors the last frame of a VSE audio strip can cause integer overflow and crash Blender. This overflow was caused by a cast from `int64_t` to `int` without prior check. The crash is fixed by keeping the variable as `int64_t` for as long as possible. --- extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'extern/audaspace/plugins') diff --git a/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp b/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp index 2da84ce0d4c..2f5b5bdd199 100644 --- a/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp +++ b/extern/audaspace/plugins/ffmpeg/FFMPEGReader.cpp @@ -292,8 +292,8 @@ int FFMPEGReader::read_packet(void* opaque, uint8_t* buf, int buf_size) { FFMPEGReader* reader = reinterpret_cast(opaque); - int size = std::min(buf_size, int(reader->m_membuffer->getSize() - reader->m_membufferpos)); - + int64_t remaining_buffer_size = reader->m_membuffer->getSize() - reader->m_membufferpos; + int64_t size = std::min(static_cast(buf_size), remaining_buffer_size); if(size < 0) return -1; -- cgit v1.2.3