From 6f9851ec136b1ced741da0e578801a519bbf3a3c Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sat, 21 Sep 2013 10:58:21 +0200 Subject: Core/PathGenerator: Fix conditional jump on uninitialized value Fix conditional jump on uninitialized value in PathGenerator::GetNavTerrain() by checking the result of getLiquidStatus() before accessing the LiquidData, uninitialized in case there's no water at all. Valgrind log: Conditional jump or move depends on uninitialised value(s) at : PathGenerator::GetNavTerrain(float, float, float) (PathGenerator.cpp:553) by : PathGenerator::UpdateFilter() (PathGenerator.cpp:542) by : PathGenerator::CreateFilter() (PathGenerator.cpp:530) by : PathGenerator::PathGenerator(Unit const*) (PathGenerator.cpp:46) by : Spell::Spell(Unit*, SpellInfo const*, TriggerCastFlags, unsigned long, bool) (Spell.cpp:493) by : Unit::CastSpell(SpellCastTargets const&, SpellInfo const*, CustomSpellValues const*, TriggerCastFlags, Item*, AuraEffect const*, unsigned long) (Unit.cpp:846) by : Unit::CastSpell(Unit*, SpellInfo const*, TriggerCastFlags, Item*, AuraEffect const*, unsigned long) (Unit.cpp:882) by : Unit::CastSpell(Unit*, unsigned int, TriggerCastFlags, Item*, AuraEffect const*, unsigned long) (Unit.cpp:870) by : Unit::CastSpell(Unit*, unsigned int, bool, Item*, AuraEffect const*, unsigned long) (Unit.cpp:858) by : Player::SendInitialPacketsAfterAddToMap() (Player.cpp:22580) by : WorldSession::HandleMoveWorldportAckOpcode() (MovementHandler.cpp:121) by : WorldSession::HandleMoveWorldportAckOpcode(WorldPacket&) (MovementHandler.cpp:37) --- src/server/game/Movement/PathGenerator.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/server/game/Movement/PathGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp index ed30b59f0ec..c902eb850f6 100644 --- a/src/server/game/Movement/PathGenerator.cpp +++ b/src/server/game/Movement/PathGenerator.cpp @@ -548,7 +548,9 @@ void PathGenerator::UpdateFilter() NavTerrain PathGenerator::GetNavTerrain(float x, float y, float z) { LiquidData data; - _sourceUnit->GetBaseMap()->getLiquidStatus(x, y, z, MAP_ALL_LIQUIDS, &data); + ZLiquidStatus liquidStatus = _sourceUnit->GetBaseMap()->getLiquidStatus(x, y, z, MAP_ALL_LIQUIDS, &data); + if (liquidStatus == LIQUID_MAP_NO_WATER) + return NAV_GROUND; switch (data.type_flags) { -- cgit v1.2.3