diff --git a/src/misc_cmd.cpp b/src/misc_cmd.cpp index 0b06a718d2..6c4f2f9f77 100644 --- a/src/misc_cmd.cpp +++ b/src/misc_cmd.cpp @@ -225,7 +225,7 @@ static bool IsUniqueCompanyName(const char *name) */ CommandCost CmdChangeCompanyName(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) { - if (StrEmpty(_cmd_text)) return CMD_ERROR; + if (StrEmpty(_cmd_text) || strlen(_cmd_text) > MAX_LENGTH_COMPANY_NAME) return CMD_ERROR; if (!IsUniqueCompanyName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE); @@ -262,7 +262,7 @@ static bool IsUniquePresidentName(const char *name) */ CommandCost CmdChangePresidentName(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) { - if (StrEmpty(_cmd_text)) return CMD_ERROR; + if (StrEmpty(_cmd_text) || strlen(_cmd_text) > MAX_LENGTH_PRESIDENT_NAME) return CMD_ERROR; if (!IsUniquePresidentName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE); diff --git a/src/network/core/config.h b/src/network/core/config.h index 63ffb1c79d..0a950d1f1a 100644 --- a/src/network/core/config.h +++ b/src/network/core/config.h @@ -24,6 +24,7 @@ enum { NETWORK_MASTER_SERVER_VERSION = 1, ///< What version of master-server-protocol do we use? NETWORK_NAME_LENGTH = 80, ///< The maximum length of the server name and map name, in bytes including '\0' + NETWORK_COMPANY_NAME_LENGTH = 32, ///< The maximum length of the company name, in bytes including '\0' NETWORK_HOSTNAME_LENGTH = 80, ///< The maximum length of the host name, in bytes including '\0' NETWORK_UNIQUE_ID_LENGTH = 33, ///< The maximum length of the unique id of the clients, in bytes including '\0' NETWORK_REVISION_LENGTH = 15, ///< The maximum length of the revision, in bytes including '\0' diff --git a/src/network/network.cpp b/src/network/network.cpp index 56fe67e856..cd0b914082 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -70,6 +70,7 @@ uint8 _network_advertise_retries; /* Check whether NETWORK_NUM_LANDSCAPES is still in sync with NUM_LANDSCAPE */ assert_compile((int)NETWORK_NUM_LANDSCAPES == (int)NUM_LANDSCAPE); +assert_compile((int)NETWORK_COMPANY_NAME_LENGTH == MAX_LENGTH_COMPANY_NAME + 1); // global variables (declared in network_data.h) CommandPacket *_local_command_queue; diff --git a/src/network/network_type.h b/src/network/network_type.h index 17bf382dca..c050336960 100644 --- a/src/network/network_type.h +++ b/src/network/network_type.h @@ -35,7 +35,7 @@ enum { }; struct NetworkPlayerInfo { - char company_name[NETWORK_NAME_LENGTH]; ///< Company name + char company_name[NETWORK_COMPANY_NAME_LENGTH]; ///< Company name char password[NETWORK_PASSWORD_LENGTH]; ///< The password for the player Year inaugurated_year; ///< What year the company started in Money company_value; ///< The company value diff --git a/src/player_gui.cpp b/src/player_gui.cpp index 8f1b558dab..c0abfad8c0 100644 --- a/src/player_gui.cpp +++ b/src/player_gui.cpp @@ -1252,13 +1252,13 @@ struct PlayerCompanyWindow : Window case PCW_WIDGET_PRESIDENT_NAME: this->query_widget = PCW_WIDGET_PRESIDENT_NAME; SetDParam(0, this->window_number); - ShowQueryString(STR_PLAYER_NAME, STR_700B_PRESIDENT_S_NAME, 31, 94, this, CS_ALPHANUMERAL); + ShowQueryString(STR_PLAYER_NAME, STR_700B_PRESIDENT_S_NAME, MAX_LENGTH_PRESIDENT_NAME, 94, this, CS_ALPHANUMERAL); break; case PCW_WIDGET_COMPANY_NAME: this->query_widget = PCW_WIDGET_COMPANY_NAME; SetDParam(0, this->window_number); - ShowQueryString(STR_COMPANY_NAME, STR_700A_COMPANY_NAME, 31, 150, this, CS_ALPHANUMERAL); + ShowQueryString(STR_COMPANY_NAME, STR_700A_COMPANY_NAME, MAX_LENGTH_COMPANY_NAME, 150, this, CS_ALPHANUMERAL); break; case PCW_WIDGET_BUILD_VIEW_HQ: { diff --git a/src/player_type.h b/src/player_type.h index bf33923bea..79d92f691b 100644 --- a/src/player_type.h +++ b/src/player_type.h @@ -30,6 +30,11 @@ enum Owner { }; DECLARE_POSTFIX_INCREMENT(Owner); +enum { + MAX_LENGTH_PRESIDENT_NAME = 31, ///< The maximum length for a president's name + MAX_LENGTH_COMPANY_NAME = 31, ///< The maximum length for a company's name +}; + /** Define basic enum properties */ template <> struct EnumPropsT : MakeEnumPropsT {}; typedef TinyEnumT OwnerByte;