From 3cb6c4f7755ce813396129d9dca98620884091df Mon Sep 17 00:00:00 2001 From: WerWolv Date: Mon, 29 Aug 2022 16:32:32 +0200 Subject: [PATCH] fix: Buffered reader returning zeros if provider size is below 16MiB Fixes #707 --- .../include/hex/providers/buffered_reader.hpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/libimhex/include/hex/providers/buffered_reader.hpp b/lib/libimhex/include/hex/providers/buffered_reader.hpp index 8dd523df6..40ead6439 100644 --- a/lib/libimhex/include/hex/providers/buffered_reader.hpp +++ b/lib/libimhex/include/hex/providers/buffered_reader.hpp @@ -4,14 +4,17 @@ #include #include +#include namespace hex::prv { + using namespace hex::literals; + class BufferedReader { public: - explicit BufferedReader(Provider *provider, size_t bufferSize = 0xFF'FFFF) + explicit BufferedReader(Provider *provider, size_t bufferSize = 16_MiB) : m_provider(provider), m_bufferAddress(provider->getBaseAddress()), m_maxBufferSize(bufferSize), - m_startAddress(0x00), m_endAddress(provider->getActualSize()), + m_startAddress(0x00), m_endAddress(provider->getActualSize() - 1), m_buffer(bufferSize) { } @@ -253,9 +256,11 @@ namespace hex::prv { private: void updateBuffer(u64 address, size_t size) { if (!this->m_bufferValid || address < this->m_bufferAddress || address + size > (this->m_bufferAddress + this->m_buffer.size())) { - const auto remainingBytes = (this->m_endAddress - address) + 1; + const auto remainingBytes = (this->m_endAddress - address) - 1; if (remainingBytes < this->m_maxBufferSize) this->m_buffer.resize(remainingBytes); + else + this->m_buffer.resize(this->m_maxBufferSize); this->m_provider->read(address, this->m_buffer.data(), this->m_buffer.size()); this->m_bufferAddress = address;