From c5035cd174dd4e3650b4ea7d2eb86c55c117975c Mon Sep 17 00:00:00 2001 From: Koncord Date: Mon, 30 Jan 2017 22:37:09 +0800 Subject: [PATCH] [Client] Fix crash and memory leak when erasing spellbook --- apps/openmw/mwmp/LocalPlayer.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/apps/openmw/mwmp/LocalPlayer.cpp b/apps/openmw/mwmp/LocalPlayer.cpp index a5dda2024..63a30d4fa 100644 --- a/apps/openmw/mwmp/LocalPlayer.cpp +++ b/apps/openmw/mwmp/LocalPlayer.cpp @@ -914,14 +914,20 @@ void LocalPlayer::setSpellbook() MWMechanics::Spells &ptrSpells = ptrPlayer.getClass().getCreatureStats(ptrPlayer).getSpells(); // Clear spells in spellbook, while ignoring abilities, powers, etc. - for (MWMechanics::Spells::TIterator iter = ptrSpells.begin(); iter != ptrSpells.end(); ++iter) + while(true) { - const ESM::Spell *spell = iter->first; - - if (spell->mData.mType == ESM::Spell::ST_Spell) + MWMechanics::Spells::TIterator iter = ptrSpells.begin(); + for (; iter != ptrSpells.end(); iter++) { - ptrSpells.remove(spell->mId); + const ESM::Spell *spell = iter->first; + if (spell->mData.mType == ESM::Spell::ST_Spell) + { + ptrSpells.remove(spell->mId); + break; + } } + if(iter == ptrSpells.end()) + break; } // Proceed by adding spells