From f325d50ab8f1dac4228983c1c7293000cdf0c28d Mon Sep 17 00:00:00 2001 From: WerWolv Date: Wed, 15 Dec 2021 22:52:35 +0100 Subject: [PATCH] yara: Actually fixed reading data --- .../builtin/include/content/providers/file_provider.hpp | 1 + .../builtin/source/content/providers/file_provider.cpp | 5 ++++- plugins/builtin/source/content/views/view_yara.cpp | 8 +++++--- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/plugins/builtin/include/content/providers/file_provider.hpp b/plugins/builtin/include/content/providers/file_provider.hpp index efd74ff70..e38f6bb54 100644 --- a/plugins/builtin/include/content/providers/file_provider.hpp +++ b/plugins/builtin/include/content/providers/file_provider.hpp @@ -59,6 +59,7 @@ namespace hex::plugin::builtin::prv { size_t m_fileSize = 0; bool m_fileStatsValid = false; + bool m_emptyFile = false; struct stat m_fileStats = { 0 }; bool m_readable = false, m_writable = false; diff --git a/plugins/builtin/source/content/providers/file_provider.cpp b/plugins/builtin/source/content/providers/file_provider.cpp index 30b2a1231..df3ca13c5 100644 --- a/plugins/builtin/source/content/providers/file_provider.cpp +++ b/plugins/builtin/source/content/providers/file_provider.cpp @@ -221,8 +221,11 @@ namespace hex::plugin::builtin::prv { mappingCleanup.release(); ProjectFile::setFilePath(this->m_path); - } else { + } else if (!this->m_emptyFile) { + this->m_emptyFile = true; this->resize(1); + } else { + return false; } fileCleanup.release(); diff --git a/plugins/builtin/source/content/views/view_yara.cpp b/plugins/builtin/source/content/views/view_yara.cpp index 83966e6aa..9d71ef63d 100644 --- a/plugins/builtin/source/content/views/view_yara.cpp +++ b/plugins/builtin/source/content/views/view_yara.cpp @@ -203,16 +203,18 @@ namespace hex::plugin::builtin { auto provider = ImHexApi::Provider::get(); - context.buffer.resize(std::min(0xF'FFFF, provider->getSize() - context.currBlock.base)); + context.buffer.resize(context.currBlock.size); if (context.buffer.empty()) return nullptr; + block->size = context.currBlock.size; + provider->read(context.currBlock.base + provider->getBaseAddress(), context.buffer.data(), context.buffer.size()); return context.buffer.data(); }; iterator.file_size = [](auto *iterator) -> u64 { - return ImHexApi::Provider::get()->getSize(); + return ImHexApi::Provider::get()->getActualSize(); }; iterator.context = &context; @@ -233,7 +235,7 @@ namespace hex::plugin::builtin { iterator->last_error = ERROR_SUCCESS; context.currBlock.base = address; - context.currBlock.size = std::min(0xF'FFFF, ImHexApi::Provider::get()->getSize() - address); + context.currBlock.size = ImHexApi::Provider::get()->getActualSize() - address; context.currBlock.context = &context; if (context.currBlock.size == 0) return nullptr;