From 6b645192d49ec8c8f49fef743dd73ab9b78a89bb Mon Sep 17 00:00:00 2001 From: WerWolv Date: Mon, 30 Jan 2023 10:26:37 +0100 Subject: [PATCH] fix: Diff view highlighting issues --- .../source/content/providers/file_provider.cpp | 2 +- plugins/builtin/source/content/views/view_diff.cpp | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/plugins/builtin/source/content/providers/file_provider.cpp b/plugins/builtin/source/content/providers/file_provider.cpp index 51bc391c8..e02bbb33e 100644 --- a/plugins/builtin/source/content/providers/file_provider.cpp +++ b/plugins/builtin/source/content/providers/file_provider.cpp @@ -57,7 +57,7 @@ namespace hex::plugin::builtin { } void FileProvider::readRaw(u64 offset, void *buffer, size_t size) { - if ((offset + size) > this->getActualSize() || buffer == nullptr || size == 0) + if (offset > (this->getActualSize() - size) || buffer == nullptr || size == 0) return; std::memcpy(buffer, reinterpret_cast(this->m_mappedFile) + offset, size); diff --git a/plugins/builtin/source/content/views/view_diff.cpp b/plugins/builtin/source/content/views/view_diff.cpp index 32c137bda..b9b321d9b 100644 --- a/plugins/builtin/source/content/views/view_diff.cpp +++ b/plugins/builtin/source/content/views/view_diff.cpp @@ -78,7 +78,7 @@ namespace hex::plugin::builtin { }; struct LineInfo { std::vector bytes; - i64 validBytes = 0; + u64 validBytes = 0; }; static DiffResult diffBytes(u8 index, const LineInfo &a, const LineInfo &b) { @@ -105,9 +105,13 @@ namespace hex::plugin::builtin { auto &provider = ImHexApi::Provider::getProviders()[id]; // Read one line of each provider - lineInfo[i].bytes.resize(this->m_columnCount); - lineInfo[i].validBytes = std::min(this->m_columnCount, provider->getSize() - row * this->m_columnCount); - provider->read(row * this->m_columnCount, lineInfo[i].bytes.data(), lineInfo[i].validBytes); + if (row * this->m_columnCount >= provider->getSize()) + lineInfo[i].validBytes = 0; + else + lineInfo[i].validBytes = std::min(this->m_columnCount, provider->getSize() - row * this->m_columnCount); + + lineInfo[i].bytes.resize(lineInfo[i].validBytes); + provider->read(provider->getBaseAddress() + provider->getCurrentPageAddress() + row * this->m_columnCount, lineInfo[i].bytes.data(), lineInfo[i].validBytes); // Calculate address width u8 addressDigits = 0; @@ -139,7 +143,7 @@ namespace hex::plugin::builtin { bool hasLastHighlight = false; ImVec2 lastHighlightEnd = { }; - for (i64 col = 0; col < lineInfo[curr].validBytes; col++) { + for (u64 col = 0; col < lineInfo[curr].validBytes; col++) { auto pos = ImGui::GetCursorScreenPos(); // Diff bytes