Author: manx
Date: Fri Mar 15 12:43:12 2024
New Revision: 20338
URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=20338
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.31/ (props changed)
branches/OpenMPT-1.31/src/mpt/io_read/filedata_base_unseekable.hpp
Modified: branches/OpenMPT-1.31/src/mpt/io_read/filedata_base_unseekable.hpp
==============================================================================
--- branches/OpenMPT-1.31/src/mpt/io_read/filedata_base_unseekable.hpp Fri Mar 15 12:42:28 2024 (r20337)
+++ branches/OpenMPT-1.31/src/mpt/io_read/filedata_base_unseekable.hpp Fri Mar 15 12:43:12 2024 (r20338)
@@ -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();
|