]> git.lizzy.rs Git - minetest.git/commitdiff
Fix empty port assertion error in 'Join Game' menu
authorolive <oliversimmo@gmail.com>
Thu, 16 Mar 2023 13:57:20 +0000 (13:57 +0000)
committerGitHub <noreply@github.com>
Thu, 16 Mar 2023 13:57:20 +0000 (14:57 +0100)
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

index 090ef33a5f65681faa83705b1ec9e21f1c199b9a..1b1a0a71a111665870d6cd74ec5fc0b52fd630a3 100644 (file)
@@ -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()