Author: manx
Date: Fri Mar 15 11:23:02 2024
New Revision: 20332
URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=20332
Log:
[Fix] mpt/io_read/filedata_base_unseekable.hpp: Fix integer overflow when trying to read close to uint32_max bytes from unseekable files.
Modified:
trunk/OpenMPT/src/mpt/io_read/filedata_base_unseekable.hpp
Modified: trunk/OpenMPT/src/mpt/io_read/filedata_base_unseekable.hpp
==============================================================================
--- trunk/OpenMPT/src/mpt/io_read/filedata_base_unseekable.hpp Fri Mar 15 11:20:31 2024 (r20331)
+++ trunk/OpenMPT/src/mpt/io_read/filedata_base_unseekable.hpp Fri Mar 15 11:23:02 2024 (r20332)
@@ -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()));
}
@@ -85,7 +85,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();
|