From 159f554d20fc239159d01b9063a26b8d520026fd Mon Sep 17 00:00:00 2001 From: macca8 Date: Sat, 26 Nov 2022 14:33:32 +1100 Subject: [PATCH] ENGINES: Improve management of empty autosave slot Addresses a vulnerability where the autosave slot may present as a regular empty slot when autosaving is disabled. By default, an empty autosave slot will always: - be identified by a dummy autosave. - display the current autosave state. - remain clear until an autosave creates the autosave file. --- engines/metaengine.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/engines/metaengine.cpp b/engines/metaengine.cpp index 63b867fb10c..01e30d879f2 100644 --- a/engines/metaengine.cpp +++ b/engines/metaengine.cpp @@ -372,7 +372,7 @@ SaveStateList MetaEngine::listSaves(const char *target) const { SaveStateList MetaEngine::listSaves(const char *target, bool saveMode) const { SaveStateList saveList = listSaves(target); - int autosaveSlot = ConfMan.getInt("autosave_period") ? getAutosaveSlot() : -1; + int autosaveSlot = getAutosaveSlot(); if (!saveMode || autosaveSlot == -1) return saveList; @@ -387,7 +387,11 @@ SaveStateList MetaEngine::listSaves(const char *target, bool saveMode) const { // No autosave yet. We want to add a dummy one in so that it can be marked as // write protected, and thus be prevented from being saved in - SaveStateDescriptor desc(this, autosaveSlot, _("Autosave")); + const Common::U32String &dummyAutosave = ConfMan.getInt("autosave_period”) ? _(“Autosave on”) : _(“Autosave off”); + SaveStateDescriptor desc(this, autosaveSlot, dummyAutosave); + desc.setWriteProtectedFlag(true); + desc.setDeletableFlag(false); + saveList.push_back(desc); Common::sort(saveList.begin(), saveList.end(), SaveStateDescriptorSlotComparator());