From fbd4bc337bd58b6ba7260a3799eddba7fd68fff6 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Wed, 2 Aug 2023 12:52:10 +0200 Subject: [PATCH] fix: Crash when trying to format invalid timestamps --- .../source/content/providers/file_provider.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/plugins/builtin/source/content/providers/file_provider.cpp b/plugins/builtin/source/content/providers/file_provider.cpp index 8465dc3e0..88718bbc8 100644 --- a/plugins/builtin/source/content/providers/file_provider.cpp +++ b/plugins/builtin/source/content/providers/file_provider.cpp @@ -157,9 +157,20 @@ namespace hex::plugin::builtin { result.emplace_back("hex.builtin.provider.file.size"_lang, hex::toByteString(this->getActualSize())); if (this->m_fileStats.has_value()) { - result.emplace_back("hex.builtin.provider.file.creation"_lang, hex::format("{:%Y-%m-%d %H:%M:%S}", fmt::localtime(this->m_fileStats->st_ctime))); - result.emplace_back("hex.builtin.provider.file.access"_lang, hex::format("{:%Y-%m-%d %H:%M:%S}", fmt::localtime(this->m_fileStats->st_atime))); - result.emplace_back("hex.builtin.provider.file.modification"_lang, hex::format("{:%Y-%m-%d %H:%M:%S}", fmt::localtime(this->m_fileStats->st_mtime))); + std::string creationTime, accessTime, modificationTime; + + try { creationTime = hex::format("{:%Y-%m-%d %H:%M:%S}", fmt::localtime(this->m_fileStats->st_ctime)); } + catch (const std::exception&) { creationTime = "???"; } + + try { accessTime = hex::format("{:%Y-%m-%d %H:%M:%S}", fmt::localtime(this->m_fileStats->st_atime)); } + catch (const std::exception&) { accessTime = "???"; } + + try { modificationTime = hex::format("{:%Y-%m-%d %H:%M:%S}", fmt::localtime(this->m_fileStats->st_mtime)); } + catch (const std::exception&) { modificationTime = "???"; } + + result.emplace_back("hex.builtin.provider.file.creation"_lang, creationTime); + result.emplace_back("hex.builtin.provider.file.access"_lang, accessTime); + result.emplace_back("hex.builtin.provider.file.modification"_lang, modificationTime); } return result;