diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/DataStores/DB2Stores.cpp | 13 | ||||
| -rw-r--r-- | src/server/game/DataStores/DBCEnums.h | 2 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/AuctionHousePackets.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/AuctionHousePackets.h | 2 |
4 files changed, 13 insertions, 12 deletions
diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp index 0d8cf894826..23e320702e6 100644 --- a/src/server/game/DataStores/DB2Stores.cpp +++ b/src/server/game/DataStores/DB2Stores.cpp @@ -994,18 +994,15 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul if (battlemaster->MaxLevel < battlemaster->MinLevel) { TC_LOG_ERROR("db2.hotfix.battlemaster_list", "Battlemaster (%u) contains bad values for MinLevel (%u) and MaxLevel (%u). Swapping values.", battlemaster->ID, battlemaster->MinLevel, battlemaster->MaxLevel); - std::swap(*(int8*)&battlemaster->MaxLevel, *(int8*)&battlemaster->MinLevel); + std::swap(const_cast<BattlemasterListEntry*>(battlemaster)->MaxLevel, const_cast<BattlemasterListEntry*>(battlemaster)->MinLevel); } if (battlemaster->MaxPlayers < battlemaster->MinPlayers) { TC_LOG_ERROR("db2.hotfix.battlemaster_list", "Battlemaster (%u) contains bad values for MinPlayers (%u) and MaxPlayers (%u). Swapping values.", battlemaster->ID, battlemaster->MinPlayers, battlemaster->MaxPlayers); - std::swap(*(int8*)&battlemaster->MaxPlayers, *(int8*)&battlemaster->MinPlayers); + std::swap(const_cast<BattlemasterListEntry*>(battlemaster)->MaxPlayers, const_cast<BattlemasterListEntry*>(battlemaster)->MinPlayers); } } - ASSERT(BATTLE_PET_SPECIES_MAX_ID >= sBattlePetSpeciesStore.GetNumRows(), - "BATTLE_PET_SPECIES_MAX_ID (%d) must be equal to or greater than %u", BATTLE_PET_SPECIES_MAX_ID, sBattlePetSpeciesStore.GetNumRows()); - for (BroadcastTextDurationEntry const* broadcastTextDuration : sBroadcastTextDurationStore) _broadcastTextDurations[{ broadcastTextDuration->BroadcastTextID, CascLocaleBit(broadcastTextDuration->Locale) }] = broadcastTextDuration->Duration; @@ -1149,11 +1146,11 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul for (GameObjectDisplayInfoEntry const* gameObjectDisplayInfo : sGameObjectDisplayInfoStore) { if (gameObjectDisplayInfo->GeoBoxMax.X < gameObjectDisplayInfo->GeoBoxMin.X) - std::swap(*(float*)(&gameObjectDisplayInfo->GeoBoxMax.X), *(float*)(&gameObjectDisplayInfo->GeoBoxMin.X)); + std::swap(const_cast<GameObjectDisplayInfoEntry*>(gameObjectDisplayInfo)->GeoBoxMax.X, const_cast<GameObjectDisplayInfoEntry*>(gameObjectDisplayInfo)->GeoBoxMin.X); if (gameObjectDisplayInfo->GeoBoxMax.Y < gameObjectDisplayInfo->GeoBoxMin.Y) - std::swap(*(float*)(&gameObjectDisplayInfo->GeoBoxMax.Y), *(float*)(&gameObjectDisplayInfo->GeoBoxMin.Y)); + std::swap(const_cast<GameObjectDisplayInfoEntry*>(gameObjectDisplayInfo)->GeoBoxMax.Y, const_cast<GameObjectDisplayInfoEntry*>(gameObjectDisplayInfo)->GeoBoxMin.Y); if (gameObjectDisplayInfo->GeoBoxMax.Z < gameObjectDisplayInfo->GeoBoxMin.Z) - std::swap(*(float*)(&gameObjectDisplayInfo->GeoBoxMax.Z), *(float*)(&gameObjectDisplayInfo->GeoBoxMin.Z)); + std::swap(const_cast<GameObjectDisplayInfoEntry*>(gameObjectDisplayInfo)->GeoBoxMax.Z, const_cast<GameObjectDisplayInfoEntry*>(gameObjectDisplayInfo)->GeoBoxMin.Z); } for (HeirloomEntry const* heirloom : sHeirloomStore) diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index e67268837f8..1e16e21f02b 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -191,8 +191,6 @@ enum AzeriteTierUnlockSetFlags AZERITE_TIER_UNLOCK_SET_FLAG_DEFAULT = 0x1 }; -#define BATTLE_PET_SPECIES_MAX_ID 3248 - enum class BattlePetSpeciesFlags : uint16 { NoRename = 0x0001, diff --git a/src/server/game/Server/Packets/AuctionHousePackets.cpp b/src/server/game/Server/Packets/AuctionHousePackets.cpp index 2ac97d8dd59..4610c0a0111 100644 --- a/src/server/game/Server/Packets/AuctionHousePackets.cpp +++ b/src/server/game/Server/Packets/AuctionHousePackets.cpp @@ -280,7 +280,13 @@ void AuctionBrowseQuery::Read() _worldPacket >> MinLevel; _worldPacket >> MaxLevel; Filters = _worldPacket.read<AuctionHouseFilterMask, uint32>(); - KnownPets.resize(_worldPacket.read<uint32>()); + + uint32 knownPetsSize = _worldPacket.read<uint32>(); + uint32 const sizeLimit = sBattlePetSpeciesStore.GetNumRows() / (sizeof(decltype(KnownPets)::value_type) * 8) + 1; + if (knownPetsSize >= sizeLimit) + throw PacketArrayMaxCapacityException(knownPetsSize, sizeLimit); + + KnownPets.resize(knownPetsSize); _worldPacket >> MaxPetLevel; for (uint8& knownPetMask : KnownPets) _worldPacket >> knownPetMask; diff --git a/src/server/game/Server/Packets/AuctionHousePackets.h b/src/server/game/Server/Packets/AuctionHousePackets.h index 1ffb8db2103..4b9ef230450 100644 --- a/src/server/game/Server/Packets/AuctionHousePackets.h +++ b/src/server/game/Server/Packets/AuctionHousePackets.h @@ -153,7 +153,7 @@ namespace WorldPackets uint8 MinLevel = 1; uint8 MaxLevel = MAX_LEVEL; AuctionHouseFilterMask Filters = AuctionHouseFilterMask(0); - Array<uint8, BATTLE_PET_SPECIES_MAX_ID / 8 + 1> KnownPets; + std::vector<uint8> KnownPets; // size checked separately in Read() int8 MaxPetLevel = 0; Optional<Addon::AddOnInfo> TaintedBy; std::string Name; |
