From acb0ac0af58d20efeea0baaaf80c586589413700 Mon Sep 17 00:00:00 2001 From: Koray Date: Sun, 15 Feb 2026 14:33:59 +0300 Subject: [PATCH] fix missing resource exception handling Unhandled exception at 0x00007FF9433E8B9C (KERNELBASE.dll) in metin2client__20260215_143044.dmp: 0xE06D7363: Microsoft C++ Exception (parameters: 0x0000000019930520, 0x0000001E1CF2CF80, 0x00007FF698014258, 0x00007FF696940000). [External Code] > Metin2_Debug.exe!std::filesystem::_Throw_fs_error(const char * _Op, const std::error_code & _Error, const std::filesystem::path & _Path1) Line 1863 C++ Metin2_Debug.exe!std::filesystem::exists(const std::filesystem::path & _Target) Line 3463 C++ Metin2_Debug.exe!CPackManager::IsExist(std::basic_string_view> path) Line 95 C++ Metin2_Debug.exe!CResourceManager::IsFileExist(const char * c_szFileName) Line 498 C++ Metin2_Debug.exe!CArea::__SetObjectInstance_SetBuilding(CArea::SObjectInstance * pObjectInstance, const CArea::SObjectData * c_pData, CProperty * pProperty) Line 599 C++ Metin2_Debug.exe!CArea::__SetObjectInstance(CArea::SObjectInstance * pObjectInstance, const CArea::SObjectData * c_pData) Line 479 C++ Metin2_Debug.exe!CArea::__Load_BuildObjectInstances() Line 449 C++ Metin2_Debug.exe!CArea::Load(const char * c_szPathName) Line 750 C++ Metin2_Debug.exe!CMapOutdoor::LoadArea(unsigned short wAreaCoordX, unsigned short wAreaCoordY, unsigned short wCellCoordX, unsigned short wCellCoordY) Line 173 C++ Metin2_Debug.exe!CMapOutdoor::Update(float fX, float fY, float fZ) Line 103 C++ Metin2_Debug.exe!CMapOutdoor::Load(float x, float y, float z) Line 40 C++ Metin2_Debug.exe!CMapManager::LoadMap(const std::string & c_rstrMapName, float x, float y, float z) Line 124 C++ Metin2_Debug.exe!CPythonBackground::Warp(unsigned long dwX, unsigned long dwY) Line 744 C++ Metin2_Debug.exe!CPythonNetworkStream::Warp(long lGlobalX, long lGlobalY) Line 374 C++ Metin2_Debug.exe!netWarp(_object * poSelf, _object * poArgs) Line 81 C++ [External Code] Metin2_Debug.exe!CPythonLauncher::RunFile(const char * c_szFileName) Line 319 C++ Metin2_Debug.exe!RunMainScript(CPythonLauncher & pyLauncher, const char * lpCmdLine) Line 246 C++ Metin2_Debug.exe!Main(HINSTANCE__ * hInstance, char * lpCmdLine) Line 302 C++ Metin2_Debug.exe!WinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, char * lpCmdLine, int nCmdShow) Line 329 C++ [External Code] + this 0x0000001e1cf2f6a0 {m_load_from_pack=true m_entries={ size=50983 } m_pBufferPool=0x0000001e1d03b350 {...} ...} const CPackManager * buf + path "d:/ymir work/zone/b/obj/general_obj_stone19_lod_01.gr2" std::basic_string_view> --- src/PackLib/PackManager.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/PackLib/PackManager.cpp b/src/PackLib/PackManager.cpp index b8ecf29..118a451 100644 --- a/src/PackLib/PackManager.cpp +++ b/src/PackLib/PackManager.cpp @@ -2,6 +2,7 @@ #include "EterLib/BufferPool.h" #include #include +#include "EterBase/Debug.h" CPackManager::CPackManager() : m_load_from_pack(true) @@ -92,7 +93,15 @@ bool CPackManager::IsExist(std::string_view path) const } // Fallback to disk (for files not in packs, like bgm folder) - return std::filesystem::exists(buf); + std::error_code ec; // To avoid exceptions from std::filesystem + const auto result = std::filesystem::exists(buf, ec); + if (ec) + { + TraceError("std::filesystem::exists failed for path '%s' with error: %s", buf.c_str(), ec.message().c_str()); + return false; + } + + return result; } void CPackManager::NormalizePath(std::string_view in, std::string& out) const