From: <sv...@op...> - 2024-03-15 11:50:37
|
Author: manx Date: Fri Mar 15 12:50:18 2024 New Revision: 20343 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=20343 Log: Merged revision(s) 20332 from trunk/OpenMPT: [Fix] mpt/io_read/filedata_base_unseekable.hpp: Fix integer overflow when trying to read close to uint32_max bytes from unseekable files. ........ Modified: branches/OpenMPT-1.30/ (props changed) branches/OpenMPT-1.30/src/mpt/io_read/filedata_base_unseekable.hpp Modified: branches/OpenMPT-1.30/src/mpt/io_read/filedata_base_unseekable.hpp ============================================================================== --- branches/OpenMPT-1.30/src/mpt/io_read/filedata_base_unseekable.hpp Fri Mar 15 12:49:06 2024 (r20342) +++ branches/OpenMPT-1.30/src/mpt/io_read/filedata_base_unseekable.hpp Fri Mar 15 12:50:18 2024 (r20343) @@ -54,9 +54,9 @@ return; } if (cache.size() == 0) { - cache.resize(mpt::align_up<std::size_t>(cachesize + requiredbuffersize, BUFFER_SIZE)); + cache.resize(mpt::saturate_align_up<std::size_t>(cachesize + requiredbuffersize, BUFFER_SIZE)); } else if (mpt::exponential_grow(cache.size()) < cachesize + requiredbuffersize) { - cache.resize(mpt::align_up<std::size_t>(cachesize + requiredbuffersize, BUFFER_SIZE)); + cache.resize(mpt::saturate_align_up<std::size_t>(cachesize + requiredbuffersize, BUFFER_SIZE)); } else { cache.resize(mpt::exponential_grow(cache.size())); } @@ -86,7 +86,7 @@ if (target <= cachesize) { return; } - std::size_t alignedpos = mpt::align_up<std::size_t>(target, QUANTUM_SIZE); + std::size_t alignedpos = mpt::saturate_align_up<std::size_t>(target, QUANTUM_SIZE); std::size_t needcount = alignedpos - cachesize; EnsureCacheBuffer(needcount); std::size_t readcount = InternalReadUnseekable(mpt::span(&cache[cachesize], alignedpos - cachesize)).size(); |