Skip to content
Snippets Groups Projects
Unverified Commit b16c4df3 authored by Re Frag's avatar Re Frag
Browse files

Ensure the servername fits into MAXSERVERNAME before setting it

This commit adds a verification before setting the servername console
variable. We now check that it fits within the MAXSERVERNAME length and
we cancel setting it if it doesn't.
Letting the servername be more than MAXSERVERNAME could lead to crashes
when trying to edit the server name from the menu so, we now avoid
those.
parent 68264e72
No related branches found
No related tags found
1 merge request!2445Fix buffer overflow when setting NETVAR string console variable and ensure servername is within MAXSERVERNAME
...@@ -50,6 +50,8 @@ static void Command_Listserv_f(void); ...@@ -50,6 +50,8 @@ static void Command_Listserv_f(void);
#endif/*MASTERSERVER*/ #endif/*MASTERSERVER*/
static boolean ServerName_CanChange (const char*);
static void Update_parameters (void); static void Update_parameters (void);
static void MasterServer_OnChange(void); static void MasterServer_OnChange(void);
...@@ -61,7 +63,7 @@ static CV_PossibleValue_t masterserver_update_rate_cons_t[] = { ...@@ -61,7 +63,7 @@ static CV_PossibleValue_t masterserver_update_rate_cons_t[] = {
}; };
consvar_t cv_masterserver = CVAR_INIT ("masterserver", "https://ds.ms.srb2.org/MS/0", CV_SAVE|CV_CALL, NULL, MasterServer_OnChange); consvar_t cv_masterserver = CVAR_INIT ("masterserver", "https://ds.ms.srb2.org/MS/0", CV_SAVE|CV_CALL, NULL, MasterServer_OnChange);
consvar_t cv_servername = CVAR_INIT ("servername", "SRB2 server", CV_SAVE|CV_NETVAR|CV_CALL|CV_NOINIT|CV_ALLOWLUA, NULL, Update_parameters); consvar_t cv_servername = CVAR_INIT_WITH_CALLBACKS ("servername", "SRB2 server", CV_SAVE|CV_NETVAR|CV_CALL|CV_NOINIT|CV_ALLOWLUA, NULL, Update_parameters, ServerName_CanChange);
consvar_t cv_masterserver_update_rate = CVAR_INIT ("masterserver_update_rate", "15", CV_SAVE|CV_CALL|CV_NOINIT, masterserver_update_rate_cons_t, Update_parameters); consvar_t cv_masterserver_update_rate = CVAR_INIT ("masterserver_update_rate", "15", CV_SAVE|CV_CALL|CV_NOINIT, masterserver_update_rate_cons_t, Update_parameters);
...@@ -497,6 +499,15 @@ Set_api (const char *api) ...@@ -497,6 +499,15 @@ Set_api (const char *api)
#endif/*MASTERSERVER*/ #endif/*MASTERSERVER*/
static boolean ServerName_CanChange(const char* newvalue)
{
if (strlen(newvalue) < MAXSERVERNAME)
return true;
CONS_Alert(CONS_NOTICE, "The server name must be shorter than %d characters\n", MAXSERVERNAME);
return false;
}
static void static void
Update_parameters (void) Update_parameters (void)
{ {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment