From 6515fdd73fbd42f094b34300499d233a8955b6c6 Mon Sep 17 00:00:00 2001 From: Alexei Kotov Date: Sun, 24 Mar 2024 19:58:22 +0300 Subject: [PATCH] Handle zero length Lua storage files more gracefully (#7823) --- CHANGELOG.md | 1 + components/lua/storage.cpp | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a83d365845..7f70ea9f90 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -154,6 +154,7 @@ Bug #7785: OpenMW-CS initialising Skill and Attribute fields to 0 instead of -1 on non-FortifyStat spells Bug #7794: Fleeing NPCs name tooltip doesn't appear Bug #7796: Absorbed enchantments don't restore magicka + Bug #7823: Game crashes when launching it. Bug #7832: Ingredient tooltips show magnitude for Fortify Maximum Magicka effect Bug #7840: First run of the launcher doesn't save viewing distance as the default value Bug #7841: Editor: "Dirty" water heights are saved in modified CELLs diff --git a/components/lua/storage.cpp b/components/lua/storage.cpp index db81b6e172..063dbf0d10 100644 --- a/components/lua/storage.cpp +++ b/components/lua/storage.cpp @@ -239,8 +239,11 @@ namespace LuaUtil assert(mData.empty()); // Shouldn't be used before loading try { - Log(Debug::Info) << "Loading Lua storage \"" << path << "\" (" << std::filesystem::file_size(path) - << " bytes)"; + std::uintmax_t fileSize = std::filesystem::file_size(path); + Log(Debug::Info) << "Loading Lua storage \"" << path << "\" (" << fileSize << " bytes)"; + if (fileSize == 0) + throw std::runtime_error("Storage file has zero length"); + std::ifstream fin(path, std::fstream::binary); std::string serializedData((std::istreambuf_iterator(fin)), std::istreambuf_iterator()); sol::table data = deserialize(mLua, serializedData); @@ -253,7 +256,7 @@ namespace LuaUtil } catch (std::exception& e) { - Log(Debug::Error) << "Can not read \"" << path << "\": " << e.what(); + Log(Debug::Error) << "Cannot read \"" << path << "\": " << e.what(); } }