From 2e9ca173ad5c12d7234f20649a65b493566af19e Mon Sep 17 00:00:00 2001 From: Malkierian Date: Tue, 28 Jan 2025 11:57:33 -0700 Subject: [PATCH 1/2] Make `OtrArchive` and `O2rArchive` trace on filesize 0 and return nullptr. Make `LoadResourceProcess` return nullptr from file being nullptr before running `LoadResource`. Change `fileToLoad == nullptr` log to TRACE in `Archive::LoadFile`. --- src/resource/ResourceManager.cpp | 1 + src/resource/archive/Archive.cpp | 2 +- src/resource/archive/O2rArchive.cpp | 6 ++++++ src/resource/archive/OtrArchive.cpp | 6 +++++- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/resource/ResourceManager.cpp b/src/resource/ResourceManager.cpp index ac0bdf8a7..a48c49d43 100644 --- a/src/resource/ResourceManager.cpp +++ b/src/resource/ResourceManager.cpp @@ -143,6 +143,7 @@ std::shared_ptr ResourceManager::LoadResourceProcess(const ResourceId auto file = LoadFileProcess(identifier.Path, initData); if (file == nullptr) { SPDLOG_TRACE("Failed to load resource file at path {}", identifier.Path); + return nullptr; } // Transform the raw data into a resource diff --git a/src/resource/archive/Archive.cpp b/src/resource/archive/Archive.cpp index 1970c9ddf..1a800756a 100644 --- a/src/resource/archive/Archive.cpp +++ b/src/resource/archive/Archive.cpp @@ -219,7 +219,7 @@ std::shared_ptr Archive::LoadFile(const std::string& filePath, std::shared } else { fileToLoad = LoadFileRaw(filePath); if (fileToLoad == nullptr) { - SPDLOG_ERROR("Failed to load file at path {}.", filePath); + SPDLOG_TRACE("Failed to load file at path {}.", filePath); return nullptr; } fileToLoad->InitData = ReadResourceInitDataLegacy(filePath, fileToLoad); diff --git a/src/resource/archive/O2rArchive.cpp b/src/resource/archive/O2rArchive.cpp index 5bc76e897..55987d38d 100644 --- a/src/resource/archive/O2rArchive.cpp +++ b/src/resource/archive/O2rArchive.cpp @@ -36,6 +36,12 @@ std::shared_ptr O2rArchive::LoadFileRaw(const std::string& filePath) { return nullptr; } + // Filesize 0, no logging needed + if (zipEntryStat.size == 0) { + SPDLOG_TRACE("({}) Failed to read file {} from mpq archive {}; filesize == 0", GetLastError(), filePath, GetPath()); + return nullptr; + } + struct zip_file* zipEntryFile = zip_fopen_index(mZipArchive, zipEntryIndex, 0); if (!zipEntryFile) { SPDLOG_TRACE("Failed to open file {} in zip archive {}.", filePath, GetPath()); diff --git a/src/resource/archive/OtrArchive.cpp b/src/resource/archive/OtrArchive.cpp index 197934ed8..79f706df5 100644 --- a/src/resource/archive/OtrArchive.cpp +++ b/src/resource/archive/OtrArchive.cpp @@ -33,6 +33,10 @@ std::shared_ptr OtrArchive::LoadFileRaw(const std::string& filePath) { auto fileToLoad = std::make_shared(); DWORD fileSize = SFileGetFileSize(fileHandle, 0); + if (fileSize == 0) { + SPDLOG_TRACE("({}) Failed to read file {} from mpq archive {}; filesize == 0", GetLastError(), filePath, GetPath()); + return nullptr; + } DWORD readBytes; fileToLoad->Buffer = std::make_shared>(fileSize); bool readFileSuccess = SFileReadFile(fileHandle, fileToLoad->Buffer->data(), fileSize, &readBytes, NULL); @@ -42,7 +46,7 @@ std::shared_ptr OtrArchive::LoadFileRaw(const std::string& filePath) { bool closeFileSuccess = SFileCloseFile(fileHandle); if (!closeFileSuccess) { SPDLOG_ERROR("({}) Failed to close file {} from mpq after read failure in archive {}", GetLastError(), - filePath, GetPath()); + filePath, GetPath()); } return nullptr; } From 810d31b57e705b90bd830e584e070ae1507a457d Mon Sep 17 00:00:00 2001 From: Malkierian Date: Tue, 28 Jan 2025 12:03:11 -0700 Subject: [PATCH 2/2] formatting --- src/resource/archive/O2rArchive.cpp | 2 +- src/resource/archive/OtrArchive.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/resource/archive/O2rArchive.cpp b/src/resource/archive/O2rArchive.cpp index 55987d38d..98a038d4c 100644 --- a/src/resource/archive/O2rArchive.cpp +++ b/src/resource/archive/O2rArchive.cpp @@ -38,7 +38,7 @@ std::shared_ptr O2rArchive::LoadFileRaw(const std::string& filePath) { // Filesize 0, no logging needed if (zipEntryStat.size == 0) { - SPDLOG_TRACE("({}) Failed to read file {} from mpq archive {}; filesize == 0", GetLastError(), filePath, GetPath()); + SPDLOG_TRACE("({}) Failed to load file {}; filesize 0", GetLastError(), filePath, GetPath()); return nullptr; } diff --git a/src/resource/archive/OtrArchive.cpp b/src/resource/archive/OtrArchive.cpp index 79f706df5..0ae907117 100644 --- a/src/resource/archive/OtrArchive.cpp +++ b/src/resource/archive/OtrArchive.cpp @@ -34,7 +34,7 @@ std::shared_ptr OtrArchive::LoadFileRaw(const std::string& filePath) { auto fileToLoad = std::make_shared(); DWORD fileSize = SFileGetFileSize(fileHandle, 0); if (fileSize == 0) { - SPDLOG_TRACE("({}) Failed to read file {} from mpq archive {}; filesize == 0", GetLastError(), filePath, GetPath()); + SPDLOG_TRACE("({}) Failed to load file {}; filesize 0", GetLastError(), filePath, GetPath()); return nullptr; } DWORD readBytes; @@ -46,7 +46,7 @@ std::shared_ptr OtrArchive::LoadFileRaw(const std::string& filePath) { bool closeFileSuccess = SFileCloseFile(fileHandle); if (!closeFileSuccess) { SPDLOG_ERROR("({}) Failed to close file {} from mpq after read failure in archive {}", GetLastError(), - filePath, GetPath()); + filePath, GetPath()); } return nullptr; }