Skip to content

Commit 1d531a7

Browse files
committed
Multiplayer join : validate address/hostname:port format in all cases
1 parent 6135f9c commit 1d531a7

1 file changed

Lines changed: 29 additions & 21 deletions

File tree

Quake/menu.c

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3682,6 +3682,32 @@ static void M_LanConfig_Draw (cb_context_t *cbx)
36823682
M_PrintWhite (cbx, basex, 148, m_return_reason);
36833683
}
36843684

3685+
static void validate_LanConfig (void)
3686+
{
3687+
char raw_join_address[countof (lan_config_joinname)];
3688+
3689+
q_strlcpy (raw_join_address, lan_config_joinname, sizeof (lan_config_joinname));
3690+
3691+
// Check if the resulting raw_join_address is of form 'address:port', in this case overwrite lan_config_portname with it
3692+
size_t nb_parts = 0;
3693+
3694+
char **split_adress = q_strsplit (raw_join_address, ":", &nb_parts);
3695+
3696+
if (nb_parts == 2 && atoi (split_adress[1]) > 0 && atoi (split_adress[1]) <= 65535)
3697+
{
3698+
// overwrite existing port value
3699+
q_strlcpy (lan_config_portname, split_adress[1], sizeof (lan_config_portname));
3700+
3701+
// set join name from the first part:
3702+
q_strlcpy (lan_config_joinname, q_strtrim (split_adress[0]), sizeof (lan_config_joinname));
3703+
}
3704+
else
3705+
{
3706+
q_strlcpy (lan_config_joinname, raw_join_address, sizeof (lan_config_joinname));
3707+
}
3708+
Mem_Free (split_adress);
3709+
}
3710+
36853711
static void M_LanConfig_Key (int key)
36863712
{
36873713
int l;
@@ -3732,6 +3758,7 @@ static void M_LanConfig_Key (int key)
37323758
M_Menu_Search_f (SLIST_INTERNET);
37333759
else if (lan_config_cursor == 3)
37343760
{
3761+
validate_LanConfig ();
37353762
m_return_state = m_state;
37363763
m_return_onerror = true;
37373764
IN_Activate ();
@@ -3774,34 +3801,15 @@ static void M_LanConfig_Key (int key)
37743801

37753802
if (joinname_remaining_room_size > 0)
37763803
{
3777-
char raw_join_address[countof (lan_config_joinname)];
3778-
3779-
q_strlcpy (raw_join_address, lan_config_joinname, sizeof (lan_config_joinname));
3780-
37813804
char *clipboard_text = PL_GetClipboardData ();
37823805

37833806
// append the existing clipboard text
37843807
if (clipboard_text)
3785-
q_strlcpy (raw_join_address + current_joinname_size, clipboard_text, joinname_remaining_room_size);
3808+
q_strlcpy (lan_config_joinname + current_joinname_size, clipboard_text, joinname_remaining_room_size);
37863809

37873810
// Check if the resulting raw_join_address is of form 'address:port', in this case overwrite lan_config_portname with it
3788-
size_t nb_parts = 0;
3789-
3790-
char **split_adress = q_strsplit (raw_join_address, ":", &nb_parts);
3811+
validate_LanConfig ();
37913812

3792-
if (nb_parts == 2 && atoi (split_adress[1]) > 0 && atoi (split_adress[1]) <= 65535)
3793-
{
3794-
// overwrite existing port
3795-
q_strlcpy (lan_config_portname, split_adress[1], sizeof (lan_config_portname));
3796-
3797-
// set join name from the first part:
3798-
q_strlcpy (lan_config_joinname, q_strtrim (split_adress[0]), sizeof (lan_config_joinname));
3799-
}
3800-
else
3801-
{
3802-
q_strlcpy (lan_config_joinname, raw_join_address, sizeof (lan_config_joinname));
3803-
}
3804-
Mem_Free (split_adress);
38053813
Mem_Free (clipboard_text);
38063814
} // end if enough room to Ctrl+v
38073815
}

0 commit comments

Comments
 (0)