From a8e561d88566013bc4bfdff9f04ea4ec83d94f63 Mon Sep 17 00:00:00 2001 From: Alexei Kotov Date: Fri, 2 Sep 2022 07:04:02 +0300 Subject: [PATCH 1/2] Avoid issues with saved games that have no screenshot data --- apps/openmw/mwgui/savegamedialog.cpp | 8 +++++++- components/esm3/savedgame.cpp | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwgui/savegamedialog.cpp b/apps/openmw/mwgui/savegamedialog.cpp index 86295e3e82..eeb3f39d91 100644 --- a/apps/openmw/mwgui/savegamedialog.cpp +++ b/apps/openmw/mwgui/savegamedialog.cpp @@ -430,7 +430,13 @@ namespace MWGui // Decode screenshot const std::vector& data = mCurrentSlot->mProfile.mScreenshot; - Files::IMemStream instream (&data[0], data.size()); + if (!data.size()) + { + Log(Debug::Warning) << "Warning: Selected saved game has no savegame screenshot"; + return; + } + + Files::IMemStream instream (data.data(), data.size()); osgDB::ReaderWriter* readerwriter = osgDB::Registry::instance()->getReaderWriterForExtension("jpg"); if (!readerwriter) diff --git a/components/esm3/savedgame.cpp b/components/esm3/savedgame.cpp index 69da8d087f..5286cda7df 100644 --- a/components/esm3/savedgame.cpp +++ b/components/esm3/savedgame.cpp @@ -50,7 +50,7 @@ void SavedGame::save (ESMWriter &esm) const esm.writeHNString ("DEPE", *iter); esm.startSubRecord("SCRN"); - esm.write(&mScreenshot[0], mScreenshot.size()); + esm.write(mScreenshot.data(), mScreenshot.size()); esm.endRecord("SCRN"); } From 10ffacc82fb6d1a4a29b07f6849da63c54fa2a6b Mon Sep 17 00:00:00 2001 From: Alexei Kotov Date: Fri, 2 Sep 2022 19:37:00 +0300 Subject: [PATCH 2/2] Update saved game dialog debug messages --- apps/openmw/mwgui/savegamedialog.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwgui/savegamedialog.cpp b/apps/openmw/mwgui/savegamedialog.cpp index eeb3f39d91..acc220c751 100644 --- a/apps/openmw/mwgui/savegamedialog.cpp +++ b/apps/openmw/mwgui/savegamedialog.cpp @@ -432,7 +432,7 @@ namespace MWGui const std::vector& data = mCurrentSlot->mProfile.mScreenshot; if (!data.size()) { - Log(Debug::Warning) << "Warning: Selected saved game has no savegame screenshot"; + Log(Debug::Warning) << "Selected save file '" << mCurrentSlot->mPath.filename() << "' has no savegame screenshot"; return; } @@ -441,14 +441,14 @@ namespace MWGui osgDB::ReaderWriter* readerwriter = osgDB::Registry::instance()->getReaderWriterForExtension("jpg"); if (!readerwriter) { - Log(Debug::Error) << "Error: Can't open savegame screenshot, no jpg readerwriter found"; + Log(Debug::Error) << "Can't open savegame screenshot, no jpg readerwriter found"; return; } osgDB::ReaderWriter::ReadResult result = readerwriter->readImage(instream); if (!result.success()) { - Log(Debug::Error) << "Error: Failed to read savegame screenshot: " << result.message() << " code " << result.status(); + Log(Debug::Error) << "Failed to read savegame screenshot: " << result.message() << " code " << result.status(); return; }