From 2c34aec1cf9e67f9e74dfd56f1b7a18cdddaf311 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Wed, 8 Apr 2026 16:04:39 +0100 Subject: Truncate overly-long usernames in USER. --- src/coremods/core_user/cmd_user.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/coremods/core_user/cmd_user.cpp b/src/coremods/core_user/cmd_user.cpp index b1a337ad1..a8a795858 100644 --- a/src/coremods/core_user/cmd_user.cpp +++ b/src/coremods/core_user/cmd_user.cpp @@ -42,10 +42,16 @@ CommandUser::CommandUser(Module* parent) CmdResult CommandUser::HandleLocal(LocalUser* user, const Params& parameters) { /* A user may only send the USER command once */ - const auto& newuser = parameters[0]; const auto& newreal = parameters[3]; if (!(user->connected & User::CONN_USER)) { + // If the username is too long then we have to truncate it to mimic the + // undocumented behaviour of other IRC servers. Failing to do so will + // break clients. + auto newuser = parameters[0]; + if (newuser.length() > ServerInstance->Config->Limits.MaxUser) + newuser.erase(ServerInstance->Config->Limits.MaxUser); + if (!ServerInstance->IsUser(newuser)) { user->WriteNumeric(ERR_INVALIDUSERNAME, newuser, "Your username is not valid"); -- cgit v1.3.1-10-gc9f91