When Client sends message longer than 256 bytes, kick him instead of handling message (#4514)
* Wrong overload of function push() got called when pushing a cEntity*. Using a const cEntity * fixes this. * Fixed accidental wrong indentation * Compiler didn't like old style cast * Kicking player when writing chat message longer than 2048 * Accounted for Astrings size() method returning bits, not bytes * Fixed typo * Changed MAX_STRING_SIZE to 1024, removed unnecessary division by 8 * Handling message length check in cClientHandle:HandleChat * Guard clause instead of if else * Remove stale changes * Fixed formatting Co-authored-by: mluchterhand <mluchterhand@max.de> Co-authored-by: Peter Bell <peterbell10@live.co.uk> Co-authored-by: Mattes D <github@xoft.cz>
This commit is contained in:
parent
0d0d019bbe
commit
08a9991b5a
@ -43,6 +43,9 @@
|
|||||||
/** Maximum number of block change interactions a player can perform per tick - exceeding this causes a kick */
|
/** Maximum number of block change interactions a player can perform per tick - exceeding this causes a kick */
|
||||||
#define MAX_BLOCK_CHANGE_INTERACTIONS 20
|
#define MAX_BLOCK_CHANGE_INTERACTIONS 20
|
||||||
|
|
||||||
|
/** Maximum number of bytes that a chat message sent by a player may consist of */
|
||||||
|
#define MAX_CHAT_MSG_LENGTH 1024
|
||||||
|
|
||||||
/** The interval for sending pings to clients.
|
/** The interval for sending pings to clients.
|
||||||
Vanilla sends one ping every 1 second. */
|
Vanilla sends one ping every 1 second. */
|
||||||
static const std::chrono::milliseconds PING_TIME_MS = std::chrono::milliseconds(1000);
|
static const std::chrono::milliseconds PING_TIME_MS = std::chrono::milliseconds(1000);
|
||||||
@ -1549,6 +1552,13 @@ void cClientHandle::HandleRightClick(int a_BlockX, int a_BlockY, int a_BlockZ, e
|
|||||||
|
|
||||||
void cClientHandle::HandleChat(const AString & a_Message)
|
void cClientHandle::HandleChat(const AString & a_Message)
|
||||||
{
|
{
|
||||||
|
if ((a_Message.size()) > MAX_CHAT_MSG_LENGTH)
|
||||||
|
{
|
||||||
|
this->Kick(std::string("Please don't exceed the maximum message length of ")
|
||||||
|
+ std::to_string(MAX_CHAT_MSG_LENGTH)
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
// We no longer need to postpone message processing, because the messages already arrive in the Tick thread
|
// We no longer need to postpone message processing, because the messages already arrive in the Tick thread
|
||||||
|
|
||||||
// If a command, perform it:
|
// If a command, perform it:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user