aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Guilds
diff options
context:
space:
mode:
authorCarbenium <carbenium@outlook.com>2015-06-11 02:26:54 +0200
committerCarbenium <carbenium@outlook.com>2015-06-11 02:26:54 +0200
commit2bd28bce696dfbed6e3e96acd37069f591f29fd4 (patch)
treedde1c0212ba7bcd07913a3be48240e989c892f87 /src/server/game/Guilds
parent1d20122903a9812bea6e3e12f285de8fe073a9d3 (diff)
Core/Guild: Add validation for guild tabard colors
Diffstat (limited to 'src/server/game/Guilds')
-rw-r--r--src/server/game/Guilds/Guild.cpp22
-rw-r--r--src/server/game/Guilds/Guild.h3
2 files changed, 22 insertions, 3 deletions
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index d4c6a0a680d..d7448c50728 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -678,13 +678,25 @@ void EmblemInfo::ReadPacket(WorldPackets::Guild::SaveGuildEmblem& packet)
m_backgroundColor = packet.Bg;
}
-void EmblemInfo::LoadFromDB(Field* fields)
+bool EmblemInfo::ValidateEmblemColors()
+{
+ if (sGuildColorBackgroundStore.LookupEntry(m_backgroundColor) &&
+ sGuildColorBorderStore.LookupEntry(m_borderColor) &&
+ sGuildColorEmblemStore.LookupEntry(m_color))
+ return true;
+
+ return false;
+}
+
+bool EmblemInfo::LoadFromDB(Field* fields)
{
m_style = fields[3].GetUInt8();
m_color = fields[4].GetUInt8();
m_borderStyle = fields[5].GetUInt8();
m_borderColor = fields[6].GetUInt8();
m_backgroundColor = fields[7].GetUInt8();
+
+ return ValidateEmblemColors();
}
void EmblemInfo::SaveToDB(ObjectGuid::LowType guildId) const
@@ -2244,7 +2256,13 @@ bool Guild::LoadFromDB(Field* fields)
m_id = fields[0].GetUInt64();
m_name = fields[1].GetString();
m_leaderGuid = ObjectGuid::Create<HighGuid::Player>(fields[2].GetUInt64());
- m_emblemInfo.LoadFromDB(fields);
+
+ if (!m_emblemInfo.LoadFromDB(fields))
+ {
+ TC_LOG_ERROR("guild", "Guild " UI64FMTD " has invalid emblem colors, skipped.", m_id);
+ return false;
+ }
+
m_info = fields[8].GetString();
m_motd = fields[9].GetString();
m_createdDate = time_t(fields[10].GetUInt32());
diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h
index 42951320885..777147f2595 100644
--- a/src/server/game/Guilds/Guild.h
+++ b/src/server/game/Guilds/Guild.h
@@ -266,9 +266,10 @@ class EmblemInfo
public:
EmblemInfo() : m_style(0), m_color(0), m_borderStyle(0), m_borderColor(0), m_backgroundColor(0) { }
- void LoadFromDB(Field* fields);
+ bool LoadFromDB(Field* fields);
void SaveToDB(ObjectGuid::LowType guildId) const;
void ReadPacket(WorldPackets::Guild::SaveGuildEmblem& packet);
+ bool ValidateEmblemColors();
uint32 GetStyle() const { return m_style; }
uint32 GetColor() const { return m_color; }