From 5ab85579f493e951d0042cd879cc848d4c7c871b Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Mon, 6 Jan 2014 12:33:48 +0300 Subject: dont leak memory if exists monster duplicate with same id. --- src/resources/db/monsterdb.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'src/resources/db/monsterdb.cpp') diff --git a/src/resources/db/monsterdb.cpp b/src/resources/db/monsterdb.cpp index f1c1a73d7..f04743507 100644 --- a/src/resources/db/monsterdb.cpp +++ b/src/resources/db/monsterdb.cpp @@ -88,7 +88,21 @@ void MonsterDB::loadXmlFile(const std::string &fileName) if (!xmlNameEqual(monsterNode, "monster")) continue; - BeingInfo *const currentInfo = new BeingInfo; + const int id = XML::getProperty(monsterNode, "id", 0); + BeingInfo *currentInfo = nullptr; + if (id == 0) + { + logger->log("MonsterDB: monster with missing ID in %s!", + fileName.c_str()); + continue; + } + else if (mMonsterInfos.find(id + offset) != mMonsterInfos.end()) + { + logger->log("MonsterDB: Redefinition of monster ID %d", id); + currentInfo = mMonsterInfos[id + offset]; + } + if (!currentInfo) + currentInfo = new BeingInfo; currentInfo->setWalkMask(Map::BLOCKMASK_WALL | Map::BLOCKMASK_CHARACTER | Map::BLOCKMASK_MONSTER); @@ -234,8 +248,7 @@ void MonsterDB::loadXmlFile(const std::string &fileName) } currentInfo->setDisplay(display); - mMonsterInfos[XML::getProperty( - monsterNode, "id", 0) + offset] = currentInfo; + mMonsterInfos[id + offset] = currentInfo; } } -- cgit v1.2.3-60-g2f50