aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjackpoz <giacomopoz@gmail.com>2020-03-15 16:07:40 +0100
committerShauren <shauren.trinity@gmail.com>2021-12-23 19:45:40 +0100
commit7d8926c55d81997380fce6a5046a8d6e6de0ec9c (patch)
tree13726f215278dd6deaad8040832f2a748dc9bd25
parentd6bd4fbd7a3a5c53ba6f2793bed53f214bd56b27 (diff)
Core/Channels: Limit channel length to 31 characters
(cherry picked from commit 2707877cf6ab34727c348190ca15499ef0205b1c)
-rw-r--r--sql/base/characters_database.sql5
-rw-r--r--sql/updates/characters/master/2021_12_23_00_characters.sql1
-rw-r--r--src/server/game/Handlers/ChannelHandler.cpp28
3 files changed, 29 insertions, 5 deletions
diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql
index bff724e46ac..47a9ed596f9 100644
--- a/sql/base/characters_database.sql
+++ b/sql/base/characters_database.sql
@@ -357,7 +357,7 @@ CREATE TABLE `channels` (
`team` int(10) unsigned NOT NULL,
`announce` tinyint(3) unsigned NOT NULL DEFAULT '1',
`ownership` tinyint(3) unsigned NOT NULL DEFAULT '1',
- `password` varchar(32) DEFAULT NULL,
+ `password` varchar(128) DEFAULT NULL,
`bannedList` text,
`lastUsed` bigint(20) unsigned NOT NULL,
PRIMARY KEY (`name`,`team`)
@@ -3651,7 +3651,8 @@ INSERT INTO `updates` VALUES
('2021_11_04_00_characters.sql','ED533235ADAD174F91A6B8E51D1046243B78B46D','ARCHIVED','2021-11-04 21:53:04',0),
('2021_11_17_00_characters.sql','03A0AB8ECD8BE5D818D41A8A610097C94A9C7DB9','ARCHIVED','2021-11-17 13:23:17',0),
('2021_12_16_00_characters_2019_07_14_00_characters.sql','DC1A3D3311FCF9106B4D91F8D2C5B893AD66C093','RELEASED','2021-12-16 01:06:53',0),
-('2021_12_16_01_characters_2019_07_16_00_characters.sql','76AE193EFA3129FA1702BF7B6FA7C4127B543BDF','RELEASED','2021-12-16 20:16:25',0);
+('2021_12_16_01_characters_2019_07_16_00_characters.sql','76AE193EFA3129FA1702BF7B6FA7C4127B543BDF','RELEASED','2021-12-16 20:16:25',0),
+('2021_12_23_00_characters.sql','7F2BD7CA61CD28D74AD9CA9F06FD7E542837ED3F','RELEASED','2021-12-23 19:16:29',0);
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
UNLOCK TABLES;
diff --git a/sql/updates/characters/master/2021_12_23_00_characters.sql b/sql/updates/characters/master/2021_12_23_00_characters.sql
new file mode 100644
index 00000000000..29da0e39a27
--- /dev/null
+++ b/sql/updates/characters/master/2021_12_23_00_characters.sql
@@ -0,0 +1 @@
+ALTER TABLE `channels` MODIFY `password` varchar(128) DEFAULT NULL AFTER `ownership`;
diff --git a/src/server/game/Handlers/ChannelHandler.cpp b/src/server/game/Handlers/ChannelHandler.cpp
index 3d55008db27..435b62b9719 100644
--- a/src/server/game/Handlers/ChannelHandler.cpp
+++ b/src/server/game/Handlers/ChannelHandler.cpp
@@ -25,8 +25,8 @@
#include "Player.h"
#include <cctype>
-static size_t const MAX_CHANNEL_NAME_STR = 0x31;
-static size_t const MAX_CHANNEL_PASS_STR = 31;
+static size_t const MAX_CHANNEL_NAME_STR = 31;
+static size_t const MAX_CHANNEL_PASS_STR = 127;
void WorldSession::HandleJoinChannel(WorldPackets::Channel::JoinChannel& packet)
{
@@ -44,8 +44,30 @@ void WorldSession::HandleJoinChannel(WorldPackets::Channel::JoinChannel& packet)
return;
}
- if (packet.ChannelName.empty())
+ if (packet.ChannelName.empty() || isdigit((unsigned char)packet.ChannelName[0]))
+ {
+ WorldPackets::Channel::ChannelNotify channelNotify;
+ channelNotify.Type = CHAT_INVALID_NAME_NOTICE;
+ channelNotify._Channel = packet.ChannelName;
+ SendPacket(channelNotify.Write());
+ return;
+ }
+
+ if (packet.ChannelName.length() > MAX_CHANNEL_NAME_STR)
+ {
+ WorldPackets::Channel::ChannelNotify channelNotify;
+ channelNotify.Type = CHAT_INVALID_NAME_NOTICE;
+ channelNotify._Channel = packet.ChannelName;
+ SendPacket(channelNotify.Write());
+ TC_LOG_ERROR("network", "Player %s tried to create a channel with a name more than " SZFMTD " characters long - blocked", GetPlayer()->GetGUID().ToString().c_str(), MAX_CHANNEL_NAME_STR);
return;
+ }
+
+ if (packet.Password.length() > MAX_CHANNEL_PASS_STR)
+ {
+ TC_LOG_ERROR("network", "Player %s tried to create a channel with a password more that " SZFMTD " characters long - blocked", GetPlayer()->GetGUID().ToString().c_str(), MAX_CHANNEL_PASS_STR);
+ return;
+ }
if (!ValidateHyperlinksAndMaybeKick(packet.ChannelName))
return;