diff options
author | Andrei Karas <akaras@inbox.ru> | 2014-01-07 14:51:36 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2014-01-07 14:51:36 +0300 |
commit | 8eb9c7cb395aa1607161ec1805b2ceeaec0a6513 (patch) | |
tree | a500fba40a395837ec4b94f93e22e4ba09b54e29 /src/resources/db/emotedb.cpp | |
parent | 5ea427865209cc2b976fc84aadcd257b35e6bd79 (diff) | |
download | manaplus-8eb9c7cb395aa1607161ec1805b2ceeaec0a6513.tar.gz manaplus-8eb9c7cb395aa1607161ec1805b2ceeaec0a6513.tar.bz2 manaplus-8eb9c7cb395aa1607161ec1805b2ceeaec0a6513.tar.xz manaplus-8eb9c7cb395aa1607161ec1805b2ceeaec0a6513.zip |
fix leak in emotedb with duplicate emotes.
Diffstat (limited to 'src/resources/db/emotedb.cpp')
-rw-r--r-- | src/resources/db/emotedb.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/resources/db/emotedb.cpp b/src/resources/db/emotedb.cpp index 907bb75c4..7c710795f 100644 --- a/src/resources/db/emotedb.cpp +++ b/src/resources/db/emotedb.cpp @@ -100,8 +100,11 @@ void EmoteDB::loadXmlFile(const std::string &fileName) paths.getStringValue("emotesFile").c_str()); continue; } - - EmoteInfo *const currentInfo = new EmoteInfo; + EmoteInfo *currentInfo = nullptr; + if (mEmoteInfos.find(id) != mEmoteInfos.end()) + currentInfo = mEmoteInfos[id]; + else + currentInfo = new EmoteInfo; currentInfo->time = XML::getProperty(emoteNode, "time", 500); for_each_xml_child_node(spriteNode, emoteNode) @@ -169,7 +172,11 @@ void EmoteDB::loadSpecialXmlFile(const std::string &fileName) } const int altId = XML::getProperty(emoteNode, "altid", -1); - EmoteInfo *const currentInfo = new EmoteInfo; + EmoteInfo *currentInfo = nullptr; + if (mEmoteInfos.find(id) != mEmoteInfos.end()) + currentInfo = mEmoteInfos[id]; + if (!currentInfo) + currentInfo = new EmoteInfo; currentInfo->time = XML::getProperty(emoteNode, "time", 500); for_each_xml_child_node(spriteNode, emoteNode) |