Skip to content

Commit 4376b04

Browse files
authored
Fix supertuxkart#5121: Check if chat messages start with 'name: ' (supertuxkart#5254)
* Check if chat messages start with 'name: ' * Check one username only
1 parent 1cabb06 commit 4376b04

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

src/network/protocols/server_lobby.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,23 @@ void ServerLobby::handleChat(Event* event)
478478
core::stringw message;
479479
event->data().decodeString16(&message, 360/*max_len*/);
480480

481+
// Check if the message starts with "(the name of main profile): " to prevent
482+
// impersonation, see #5121.
483+
std::string message_utf8 = StringUtils::wideToUtf8(message);
484+
std::string prefix = StringUtils::wideToUtf8(
485+
event->getPeer()->getPlayerProfiles()[0]->getName()) + ": ";
486+
487+
if (!StringUtils::startsWith(message_utf8, prefix))
488+
{
489+
NetworkString* chat = getNetworkString();
490+
chat->setSynchronous(true);
491+
core::stringw warn = "Don't try to impersonate others!";
492+
chat->addUInt8(LE_CHAT).encodeString16(warn);
493+
event->getPeer()->sendPacket(chat, true/*reliable*/);
494+
delete chat;
495+
return;
496+
}
497+
481498
KartTeam target_team = KART_TEAM_NONE;
482499
if (event->data().size() > 0)
483500
target_team = (KartTeam)event->data().getUInt8();

0 commit comments

Comments
 (0)