aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/DataStores/DB2Stores.cpp13
-rw-r--r--src/server/game/DataStores/DBCEnums.h2
-rw-r--r--src/server/game/Server/Packets/AuctionHousePackets.cpp8
-rw-r--r--src/server/game/Server/Packets/AuctionHousePackets.h2
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;