From b1c8a7d055bf41134fecca9fd92db84c4affeb21 Mon Sep 17 00:00:00 2001 From: olive Date: Thu, 16 Mar 2023 13:57:20 +0000 Subject: [PATCH] Fix empty port assertion error in 'Join Game' menu Pressing "Register" when the port field was empty led to an assertion error inside `create_register_dialog`, it was simply checking the port was a number. --- builtin/mainmenu/tab_online.lua | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/builtin/mainmenu/tab_online.lua b/builtin/mainmenu/tab_online.lua index 090ef33a5..1b1a0a71a 100644 --- a/builtin/mainmenu/tab_online.lua +++ b/builtin/mainmenu/tab_online.lua @@ -346,12 +346,14 @@ local function main_button_handler(tabview, fields, name, tabdata) return true end - if (fields.btn_mp_login or fields.key_enter) - and fields.te_address ~= "" and fields.te_port then + local host_filled = (fields.te_address ~= "") and fields.te_port:match("^%s*[1-9][0-9]*%s*$") + local te_port_number = tonumber(fields.te_port) + + if (fields.btn_mp_login or fields.key_enter) and host_filled then gamedata.playername = fields.te_name gamedata.password = fields.te_pwd gamedata.address = fields.te_address - gamedata.port = tonumber(fields.te_port) + gamedata.port = te_port_number local enable_split_login_register = core.settings:get_bool("enable_split_login_register") gamedata.allow_login_or_register = enable_split_login_register and "login" or "any" @@ -391,10 +393,10 @@ local function main_button_handler(tabview, fields, name, tabdata) return true end - if fields.btn_mp_register and fields.te_address ~= "" and fields.te_port then + if fields.btn_mp_register and host_filled then local idx = core.get_table_index("servers") local server = idx and tabdata.lookup[idx] - if server and (server.address ~= fields.te_address or server.port ~= tonumber(fields.te_port)) then + if server and (server.address ~= fields.te_address or server.port ~= te_port_number) then server = nil end @@ -403,7 +405,7 @@ local function main_button_handler(tabview, fields, name, tabdata) return true end - local dlg = create_register_dialog(fields.te_address, tonumber(fields.te_port), server) + local dlg = create_register_dialog(fields.te_address, te_port_number, server) dlg:set_parent(tabview) tabview:hide() dlg:show()