From b7645692084a38b83ca20c1e66ecdebea541b837 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sun, 22 Dec 2024 22:12:54 +0100 Subject: Enforce player name length limit and max player count --- locale/en.ini | 2 ++ server/src/server.rs | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/locale/en.ini b/locale/en.ini index eaa6933e..e1013727 100644 --- a/locale/en.ini +++ b/locale/en.ini @@ -229,6 +229,8 @@ s.error.quoting_invalid=Command quoting invalid s.error.self_interact=Interacting with yourself. This is impossible. s.error.tutorial_already_running=Tutorial already running s.error.tutorial_no_running=No tutorial running +s.error.username_length_limit=Username length limit of 64 bytes exceeded +s.error.too_many_players=Too many players joined s.replay.cannot_join=Replays cannot be joined. s.state.abort_no_players=Game was aborted due to a lack of players. s.state.game_aborted=Game was aborted by {0}. diff --git a/server/src/server.rs b/server/src/server.rs index b9cafede..f69ea5e4 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -23,7 +23,7 @@ use crate::{ scoreboard::ScoreboardStore, tre, ConnectionID, }; -use anyhow::{Context, Result}; +use anyhow::{bail, Context, Result}; use hurrycurry_client_lib::{Game, Involvement, Item, Player, Tile}; use hurrycurry_protocol::{ glam::{IVec2, Vec2}, @@ -369,6 +369,12 @@ impl Server { id, class, } => { + if name.len() > 64 { + return Err(tre!("s.error.username_length_limit")); + } + if self.game.players.len() > 64 { + return Err(tre!("s.error.too_many_players")) + } let id = id.unwrap_or_else(|| { let id = self.player_id_counter; self.player_id_counter.0 += 1; -- cgit v1.2.3-70-g09d2