diff options
-rw-r--r-- | src/console_cmds.cpp | 9 | ||||
-rw-r--r-- | src/network/network_client.cpp | 5 |
2 files changed, 13 insertions, 1 deletions
diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index b3819115c..305444f8c 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -716,7 +716,14 @@ DEF_CONSOLE_CMD(ConClientNickChange) return true; } - if (!NetworkServerChangeClientName(client_id, argv[2])) { + char *client_name = argv[2]; + StrTrimInPlace(client_name); + if (!NetworkIsValidClientName(client_name)) { + IConsoleError("Cannot give a client an empty name"); + return true; + } + + if (!NetworkServerChangeClientName(client_id, client_name)) { IConsoleError("Cannot give a client a duplicate name"); } diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 35c52d3bc..a80931c33 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -1308,6 +1308,11 @@ void NetworkUpdateClientName() NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(_network_own_client_id); if (ci == nullptr) return; + /* There is no validation on string settings, it is actually a post change callback. + * This method is called from that post change callback. So, when the client name is + * changed via the console there is no easy way to prevent an invalid name. Though, + * we can prevent it getting sent here. */ + if (!NetworkValidateClientName()) return; /* Don't change the name if it is the same as the old name */ if (strcmp(ci->client_name, _settings_client.network.client_name) != 0) { |