Skip to content

Commit 01ea2ad

Browse files
committed
Merge branch 'fix_delete_game_ub' into 'master'
Avoid accessing removed character on deleting last save (#8387) Closes #8387 See merge request OpenMW/openmw!4574
2 parents 5f92d52 + 5776eea commit 01ea2ad

File tree

3 files changed

+5
-4
lines changed

3 files changed

+5
-4
lines changed

apps/openmw/mwstate/charactermanager.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ MWState::Character* MWState::CharacterManager::getCurrentCharacter()
3838
return mCurrent;
3939
}
4040

41-
void MWState::CharacterManager::deleteSlot(const MWState::Character* character, const MWState::Slot* slot)
41+
void MWState::CharacterManager::deleteSlot(const MWState::Slot* slot, const MWState::Character*& character)
4242
{
4343
std::list<Character>::iterator it = findCharacter(character);
4444

@@ -51,6 +51,7 @@ void MWState::CharacterManager::deleteSlot(const MWState::Character* character,
5151
if (character == mCurrent)
5252
mCurrent = nullptr;
5353
mCharacters.erase(it);
54+
character = nullptr;
5455
}
5556
}
5657

apps/openmw/mwstate/charactermanager.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ namespace MWState
3333
Character* getCurrentCharacter();
3434
///< @note May return null
3535

36-
void deleteSlot(const MWState::Character* character, const MWState::Slot* slot);
36+
void deleteSlot(const MWState::Slot* slot, const Character*& character);
3737

3838
Character* createCharacter(const std::string& name);
3939
///< Create new character within saved game management

apps/openmw/mwstate/statemanagerimp.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -706,10 +706,10 @@ void MWState::StateManager::quickLoad()
706706
void MWState::StateManager::deleteGame(const MWState::Character* character, const MWState::Slot* slot)
707707
{
708708
const std::filesystem::path savePath = slot->mPath;
709-
mCharacterManager.deleteSlot(character, slot);
709+
mCharacterManager.deleteSlot(slot, character);
710710
if (mLastSavegame == savePath)
711711
{
712-
if (character->begin() != character->end())
712+
if (character != nullptr)
713713
mLastSavegame = character->begin()->mPath;
714714
else
715715
mLastSavegame.clear();

0 commit comments

Comments
 (0)