aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSpp <spp@jorge.gr>2013-05-30 13:14:06 +0200
committerSpp <spp@jorge.gr>2013-05-30 13:18:29 +0200
commit9664c0ab5cc7449f2e839fb60b6b87c9d56dfb92 (patch)
tree092af4d16233823423cc552c567acb3307380951
parent782ea4309a4d392ba9933caace067d567703c84b (diff)
Core/Misc: Another batch of fixes for issues found by static analysis
-rw-r--r--src/server/authserver/Server/AuthSocket.cpp6
-rw-r--r--src/server/authserver/Server/RealmSocket.cpp4
-rw-r--r--src/server/collision/Maps/MapTree.cpp5
-rw-r--r--src/server/collision/Maps/MapTree.h3
-rw-r--r--src/server/collision/Maps/TileAssembler.cpp32
-rw-r--r--src/server/collision/Maps/TileAssembler.h4
-rw-r--r--src/server/game/AI/CoreAI/UnitAI.cpp49
-rw-r--r--src/server/game/Achievements/AchievementMgr.cpp13
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp38
-rw-r--r--src/server/game/Entities/Creature/GossipDef.cpp44
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp5
-rw-r--r--src/server/game/Spells/SpellMgr.cpp3
-rw-r--r--src/server/scripts/Commands/cs_server.cpp3
-rw-r--r--src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp19
14 files changed, 131 insertions, 97 deletions
diff --git a/src/server/authserver/Server/AuthSocket.cpp b/src/server/authserver/Server/AuthSocket.cpp
index 2e73498eb52..792e1bf2a86 100644
--- a/src/server/authserver/Server/AuthSocket.cpp
+++ b/src/server/authserver/Server/AuthSocket.cpp
@@ -196,12 +196,12 @@ const AuthHandler table[] =
Patcher PatchesCache;
// Constructor - set the N and g values for SRP6
-AuthSocket::AuthSocket(RealmSocket& socket) : pPatch(NULL), socket_(socket)
+AuthSocket::AuthSocket(RealmSocket& socket) :
+ pPatch(NULL), socket_(socket), _authed(false), _build(0),
+ _expversion(0), _accountSecurityLevel(SEC_PLAYER)
{
N.SetHexStr("894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7");
g.SetDword(7);
- _authed = false;
- _accountSecurityLevel = SEC_PLAYER;
}
// Close patch file descriptor before leaving
diff --git a/src/server/authserver/Server/RealmSocket.cpp b/src/server/authserver/Server/RealmSocket.cpp
index e249894a4d3..6710a6a88ae 100644
--- a/src/server/authserver/Server/RealmSocket.cpp
+++ b/src/server/authserver/Server/RealmSocket.cpp
@@ -27,7 +27,9 @@ RealmSocket::Session::Session(void) {}
RealmSocket::Session::~Session(void) { }
-RealmSocket::RealmSocket(void) : input_buffer_(4096), session_(NULL), _remoteAddress()
+RealmSocket::RealmSocket(void) :
+ input_buffer_(4096), session_(NULL),
+ _remoteAddress(), _remotePort(0)
{
reference_counting_policy().value(ACE_Event_Handler::Reference_Counting_Policy::ENABLED);
diff --git a/src/server/collision/Maps/MapTree.cpp b/src/server/collision/Maps/MapTree.cpp
index ebe3afce810..dc12bb68e0d 100644
--- a/src/server/collision/Maps/MapTree.cpp
+++ b/src/server/collision/Maps/MapTree.cpp
@@ -119,8 +119,9 @@ namespace VMAP
return intersectionCallBack.result;
}
- StaticMapTree::StaticMapTree(uint32 mapID, const std::string &basePath)
- : iMapID(mapID), iIsTiled(false), iTreeValues(0), iBasePath(basePath)
+ StaticMapTree::StaticMapTree(uint32 mapID, const std::string &basePath) :
+ iMapID(mapID), iIsTiled(false), iTreeValues(NULL),
+ iNTreeValues(0), iBasePath(basePath)
{
if (iBasePath.length() > 0 && iBasePath[iBasePath.length()-1] != '/' && iBasePath[iBasePath.length()-1] != '\\')
{
diff --git a/src/server/collision/Maps/MapTree.h b/src/server/collision/Maps/MapTree.h
index e97c44d089e..c66893da82f 100644
--- a/src/server/collision/Maps/MapTree.h
+++ b/src/server/collision/Maps/MapTree.h
@@ -85,7 +85,8 @@ namespace VMAP
struct AreaInfo
{
- AreaInfo(): result(false), ground_Z(-G3D::inf()) {}
+ AreaInfo(): result(false), ground_Z(-G3D::inf()), flags(0), adtId(0),
+ rootId(0), groupId(0) {}
bool result;
float ground_Z;
uint32 flags;
diff --git a/src/server/collision/Maps/TileAssembler.cpp b/src/server/collision/Maps/TileAssembler.cpp
index aca7c02e79f..4b61e5da40b 100644
--- a/src/server/collision/Maps/TileAssembler.cpp
+++ b/src/server/collision/Maps/TileAssembler.cpp
@@ -152,23 +152,25 @@ namespace VMAP
uint32 x, y;
StaticMapTree::unpackTileID(tile->first, x, y);
tilefilename << std::setw(2) << x << '_' << std::setw(2) << y << ".vmtile";
- FILE* tilefile = fopen(tilefilename.str().c_str(), "wb");
- // file header
- if (success && fwrite(VMAP_MAGIC, 1, 8, tilefile) != 8) success = false;
- // write number of tile spawns
- if (success && fwrite(&nSpawns, sizeof(uint32), 1, tilefile) != 1) success = false;
- // write tile spawns
- for (uint32 s=0; s<nSpawns; ++s)
+ if (FILE* tilefile = fopen(tilefilename.str().c_str(), "wb"))
{
- if (s)
- ++tile;
- const ModelSpawn &spawn2 = map_iter->second->UniqueEntries[tile->second];
- success = success && ModelSpawn::writeToFile(tilefile, spawn2);
- // MapTree nodes to update when loading tile:
- std::map<uint32, uint32>::iterator nIdx = modelNodeIdx.find(spawn2.ID);
- if (success && fwrite(&nIdx->second, sizeof(uint32), 1, tilefile) != 1) success = false;
+ // file header
+ if (success && fwrite(VMAP_MAGIC, 1, 8, tilefile) != 8) success = false;
+ // write number of tile spawns
+ if (success && fwrite(&nSpawns, sizeof(uint32), 1, tilefile) != 1) success = false;
+ // write tile spawns
+ for (uint32 s=0; s<nSpawns; ++s)
+ {
+ if (s)
+ ++tile;
+ const ModelSpawn &spawn2 = map_iter->second->UniqueEntries[tile->second];
+ success = success && ModelSpawn::writeToFile(tilefile, spawn2);
+ // MapTree nodes to update when loading tile:
+ std::map<uint32, uint32>::iterator nIdx = modelNodeIdx.find(spawn2.ID);
+ if (success && fwrite(&nIdx->second, sizeof(uint32), 1, tilefile) != 1) success = false;
+ }
+ fclose(tilefile);
}
- fclose(tilefile);
}
// break; //test, extract only first map; TODO: remvoe this line
}
diff --git a/src/server/collision/Maps/TileAssembler.h b/src/server/collision/Maps/TileAssembler.h
index a11ce272d62..56cb7600e4f 100644
--- a/src/server/collision/Maps/TileAssembler.h
+++ b/src/server/collision/Maps/TileAssembler.h
@@ -40,6 +40,7 @@ namespace VMAP
private:
G3D::Matrix3 iRotation;
public:
+ ModelPosition(): iScale(0.0f) { }
G3D::Vector3 iPos;
G3D::Vector3 iDir;
float iScale;
@@ -74,7 +75,8 @@ namespace VMAP
std::vector<G3D::Vector3> vertexArray;
class WmoLiquid* liquid;
- GroupModel_Raw() : liquid(0) {}
+ GroupModel_Raw() : mogpflags(0), GroupWMOID(0), liquidflags(0),
+ liquid(NULL) {}
~GroupModel_Raw();
bool Read(FILE* f);
diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp
index 0ab807466d5..70c4761e025 100644
--- a/src/server/game/AI/CoreAI/UnitAI.cpp
+++ b/src/server/game/AI/CoreAI/UnitAI.cpp
@@ -123,34 +123,45 @@ void UnitAI::DoCastToAllHostilePlayers(uint32 spellid, bool triggered)
void UnitAI::DoCast(uint32 spellId)
{
Unit* target = NULL;
- //TC_LOG_ERROR(LOG_FILTER_GENERAL, "aggre %u %u", spellId, (uint32)AISpellInfo[spellId].target);
+
switch (AISpellInfo[spellId].target)
{
default:
- case AITARGET_SELF: target = me; break;
- case AITARGET_VICTIM: target = me->getVictim(); break;
+ case AITARGET_SELF:
+ target = me;
+ break;
+ case AITARGET_VICTIM:
+ target = me->getVictim();
+ break;
case AITARGET_ENEMY:
{
- const SpellInfo* spellInfo = sSpellMgr->GetSpellInfo(spellId);
- bool playerOnly = spellInfo->AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_PLAYERS;
- //float range = GetSpellMaxRange(spellInfo, false);
- target = SelectTarget(SELECT_TARGET_RANDOM, 0, spellInfo->GetMaxRange(false), playerOnly);
+ if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId))
+ {
+ bool playerOnly = spellInfo->AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_PLAYERS;
+ target = SelectTarget(SELECT_TARGET_RANDOM, 0, spellInfo->GetMaxRange(false), playerOnly);
+ }
break;
}
- case AITARGET_ALLY: target = me; break;
- case AITARGET_BUFF: target = me; break;
+ case AITARGET_ALLY:
+ target = me;
+ break;
+ case AITARGET_BUFF:
+ target = me;
+ break;
case AITARGET_DEBUFF:
{
- const SpellInfo* spellInfo = sSpellMgr->GetSpellInfo(spellId);
- bool playerOnly = spellInfo->AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_PLAYERS;
- float range = spellInfo->GetMaxRange(false);
-
- DefaultTargetSelector targetSelector(me, range, playerOnly, -(int32)spellId);
- if (!(spellInfo->AuraInterruptFlags & AURA_INTERRUPT_FLAG_NOT_VICTIM)
- && targetSelector(me->getVictim()))
- target = me->getVictim();
- else
- target = SelectTarget(SELECT_TARGET_RANDOM, 0, targetSelector);
+ if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId))
+ {
+ bool playerOnly = spellInfo->AttributesEx3 & SPELL_ATTR3_ONLY_TARGET_PLAYERS;
+ float range = spellInfo->GetMaxRange(false);
+
+ DefaultTargetSelector targetSelector(me, range, playerOnly, -(int32)spellId);
+ if (!(spellInfo->AuraInterruptFlags & AURA_INTERRUPT_FLAG_NOT_VICTIM)
+ && targetSelector(me->getVictim()))
+ target = me->getVictim();
+ else
+ target = SelectTarget(SELECT_TARGET_RANDOM, 0, targetSelector);
+ }
break;
}
}
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index b7b065a8b31..00bffb8f21c 100644
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -1639,6 +1639,9 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achievementCriteria, AchievementEntry const* achievement)
{
+ if (!achievement)
+ return false;
+
// counter can never complete
if (achievement->flags & ACHIEVEMENT_FLAG_COUNTER)
return false;
@@ -1951,8 +1954,11 @@ void AchievementMgr::SetCriteriaProgress(AchievementCriteriaEntry const* entry,
SendCriteriaUpdate(entry, progress, timeElapsed, timedCompleted);
}
-void AchievementMgr::RemoveCriteriaProgress(const AchievementCriteriaEntry* entry)
+void AchievementMgr::RemoveCriteriaProgress(AchievementCriteriaEntry const* entry)
{
+ if (!entry)
+ return;
+
CriteriaProgressMap::iterator criteriaProgress = m_criteriaProgress.find(entry->ID);
if (criteriaProgress == m_criteriaProgress.end())
return;
@@ -2127,12 +2133,11 @@ void AchievementMgr::SendRespondInspectAchievements(Player* player) const
*/
void AchievementMgr::BuildAllDataPacket(WorldPacket* data) const
{
- AchievementEntry const* achievement = NULL;
for (CompletedAchievementMap::const_iterator iter = m_completedAchievements.begin(); iter != m_completedAchievements.end(); ++iter)
{
// Skip hidden achievements
- achievement = sAchievementMgr->GetAchievement(iter->first);
- if (achievement->flags & ACHIEVEMENT_FLAG_HIDDEN)
+ AchievementEntry const* achievement = sAchievementMgr->GetAchievement(iter->first);
+ if (!achievement || achievement->flags & ACHIEVEMENT_FLAG_HIDDEN)
continue;
*data << uint32(iter->first);
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 50f745669a7..f274f201e04 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -2456,19 +2456,18 @@ uint32 Creature::GetVendorItemCurrentCount(VendorItem const* vItem)
time_t ptime = time(NULL);
if (time_t(vCount->lastIncrementTime + vItem->incrtime) <= ptime)
- {
- ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(vItem->item);
-
- uint32 diff = uint32((ptime - vCount->lastIncrementTime)/vItem->incrtime);
- if ((vCount->count + diff * pProto->BuyCount) >= vItem->maxcount)
+ if (ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(vItem->item))
{
- m_vendorItemCounts.erase(itr);
- return vItem->maxcount;
- }
+ uint32 diff = uint32((ptime - vCount->lastIncrementTime)/vItem->incrtime);
+ if ((vCount->count + diff * pProto->BuyCount) >= vItem->maxcount)
+ {
+ m_vendorItemCounts.erase(itr);
+ return vItem->maxcount;
+ }
- vCount->count += diff * pProto->BuyCount;
- vCount->lastIncrementTime = ptime;
- }
+ vCount->count += diff * pProto->BuyCount;
+ vCount->lastIncrementTime = ptime;
+ }
return vCount->count;
}
@@ -2495,15 +2494,14 @@ uint32 Creature::UpdateVendorItemCurrentCount(VendorItem const* vItem, uint32 us
time_t ptime = time(NULL);
if (time_t(vCount->lastIncrementTime + vItem->incrtime) <= ptime)
- {
- ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(vItem->item);
-
- uint32 diff = uint32((ptime - vCount->lastIncrementTime)/vItem->incrtime);
- if ((vCount->count + diff * pProto->BuyCount) < vItem->maxcount)
- vCount->count += diff * pProto->BuyCount;
- else
- vCount->count = vItem->maxcount;
- }
+ if (ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(vItem->item))
+ {
+ uint32 diff = uint32((ptime - vCount->lastIncrementTime)/vItem->incrtime);
+ if ((vCount->count + diff * pProto->BuyCount) < vItem->maxcount)
+ vCount->count += diff * pProto->BuyCount;
+ else
+ vCount->count = vItem->maxcount;
+ }
vCount->count = vCount->count > used_count ? vCount->count-used_count : 0;
vCount->lastIncrementTime = ptime;
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp
index 8a8c9ad895f..d59015fd359 100644
--- a/src/server/game/Entities/Creature/GossipDef.cpp
+++ b/src/server/game/Entities/Creature/GossipDef.cpp
@@ -184,7 +184,9 @@ void PlayerMenu::SendGossipMenu(uint32 titleTextId, uint64 objectGUID) const
data << item.BoxMessage; // accept text (related to money) pop up box, 2.0.3
}
- data << uint32(_questMenu.GetMenuItemCount()); // max count 0x20
+ size_t count_pos = data.wpos();
+ data << uint32(0); // max count 0x20
+ uint32 count = 0;
// Store this instead of checking the Singleton every loop iteration
bool questLevelInTitle = sWorld->getBoolConfig(CONFIG_UI_QUESTLEVELS_IN_DIALOGS);
@@ -193,26 +195,29 @@ void PlayerMenu::SendGossipMenu(uint32 titleTextId, uint64 objectGUID) const
{
QuestMenuItem const& item = _questMenu.GetItem(i);
uint32 questID = item.QuestId;
- Quest const* quest = sObjectMgr->GetQuestTemplate(questID);
-
- data << uint32(questID);
- data << uint32(item.QuestIcon);
- data << int32(quest->GetQuestLevel());
- data << uint32(quest->GetFlags()); // 3.3.3 quest flags
- data << uint8(0); // 3.3.3 changes icon: blue question or yellow exclamation
- std::string title = quest->GetTitle();
+ if (Quest const* quest = sObjectMgr->GetQuestTemplate(questID))
+ {
+ ++count;
+ data << uint32(questID);
+ data << uint32(item.QuestIcon);
+ data << int32(quest->GetQuestLevel());
+ data << uint32(quest->GetFlags()); // 3.3.3 quest flags
+ data << uint8(0); // 3.3.3 changes icon: blue question or yellow exclamation
+ std::string title = quest->GetTitle();
- int32 locale = _session->GetSessionDbLocaleIndex();
- if (locale >= 0)
- if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(questID))
- ObjectMgr::GetLocaleString(localeData->Title, locale, title);
+ int32 locale = _session->GetSessionDbLocaleIndex();
+ if (locale >= 0)
+ if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(questID))
+ ObjectMgr::GetLocaleString(localeData->Title, locale, title);
- if (questLevelInTitle)
- AddQuestLevelToTitle(title, quest->GetQuestLevel());
+ if (questLevelInTitle)
+ AddQuestLevelToTitle(title, quest->GetQuestLevel());
- data << title; // max 0x200
+ data << title; // max 0x200
+ }
}
+ data.put<uint8>(count_pos, count);
_session->SendPacket(&data);
}
@@ -300,20 +305,21 @@ void PlayerMenu::SendQuestGiverQuestList(QEmote eEmote, const std::string& Title
data << uint32(eEmote._Emote); // NPC emote
size_t count_pos = data.wpos();
- data << uint8 (_questMenu.GetMenuItemCount());
+ data << uint8 (0);
uint32 count = 0;
// Store this instead of checking the Singleton every loop iteration
bool questLevelInTitle = sWorld->getBoolConfig(CONFIG_UI_QUESTLEVELS_IN_DIALOGS);
- for (; count < _questMenu.GetMenuItemCount(); ++count)
+ for (uint32 i = 0; i < _questMenu.GetMenuItemCount(); ++i)
{
- QuestMenuItem const& qmi = _questMenu.GetItem(count);
+ QuestMenuItem const& qmi = _questMenu.GetItem(i);
uint32 questID = qmi.QuestId;
if (Quest const* quest = sObjectMgr->GetQuestTemplate(questID))
{
+ ++count;
std::string title = quest->GetTitle();
int32 locale = _session->GetSessionDbLocaleIndex();
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index cc9e87052f7..1556703e45b 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -87,7 +87,10 @@ bool GameObject::AIM_Initialize()
std::string GameObject::GetAIName() const
{
- return sObjectMgr->GetGameObjectTemplate(GetEntry())->AIName;
+ if (GameObjectTemplate const* got = sObjectMgr->GetGameObjectTemplate(GetEntry()))
+ return got->AIName;
+
+ return "";
}
void GameObject::CleanupsBeforeDelete(bool /*finalCleanup*/)
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index 026c61d4965..9cedfdf922f 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -499,6 +499,9 @@ uint32 SpellMgr::GetSpellIdForDifficulty(uint32 spellId, Unit const* caster) con
SpellInfo const* SpellMgr::GetSpellForDifficultyFromSpell(SpellInfo const* spell, Unit const* caster) const
{
+ if (!spell)
+ return NULL;
+
uint32 newSpellId = GetSpellIdForDifficulty(spell->Id, caster);
SpellInfo const* newSpell = GetSpellInfo(newSpellId);
if (!newSpell)
diff --git a/src/server/scripts/Commands/cs_server.cpp b/src/server/scripts/Commands/cs_server.cpp
index 309380a9cbb..11b4ebf33ae 100644
--- a/src/server/scripts/Commands/cs_server.cpp
+++ b/src/server/scripts/Commands/cs_server.cpp
@@ -338,7 +338,8 @@ public:
}
else
sWorld->ShutdownServ(time, SHUTDOWN_MASK_IDLE, SHUTDOWN_EXIT_CODE);
- return true;
+
+ return true;
}
// Exit the realm
diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
index 9e312ef8f94..b6b701c513d 100644
--- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
+++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp
@@ -716,27 +716,27 @@ public:
if (CheckTimer <= diff)
{
Creature* Kalec = Unit::GetCreature(*me, KalecGUID);
- if (!Kalec || (Kalec && !Kalec->isAlive()))
+ if (!Kalec || !Kalec->isAlive())
{
if (Creature* Kalecgos = Unit::GetCreature(*me, KalecgosGUID))
Kalecgos->AI()->EnterEvadeMode();
- return;
+ return;
}
+
if (HealthBelowPct(10) && !isEnraged)
{
if (Creature* Kalecgos = Unit::GetCreature(*me, KalecgosGUID))
Kalecgos->AI()->DoAction(DO_ENRAGE);
DoAction(DO_ENRAGE);
}
+
Creature* Kalecgos = Unit::GetCreature(*me, KalecgosGUID);
- if (Kalecgos)
+ if (Kalecgos && !Kalecgos->isInCombat())
{
- if (!Kalecgos->isInCombat())
- {
- me->AI()->EnterEvadeMode();
- return;
- }
+ me->AI()->EnterEvadeMode();
+ return;
}
+
if (!isBanished && HealthBelowPct(1))
{
if (Kalecgos)
@@ -746,8 +746,7 @@ public:
me->DealDamage(me, me->GetHealth());
return;
}
- else
- DoAction(DO_BANISH);
+ DoAction(DO_BANISH);
}
else
{