Sfinv: Remove possibility of infinite loop when homepage doesn't exist
authorrubenwardy <rubenwardy@gmail.com>
Wed, 7 Jun 2017 20:33:42 +0000 (21:33 +0100)
committersfan5 <sfan5@live.de>
Sun, 19 Nov 2017 22:03:38 +0000 (23:03 +0100)
mods/sfinv/api.lua

index c9b9d4a7a10d53ee51c3e68080f0ed686d6827fe..fdb652b8d7d3dca8073b6e38e619a79630df54d2 100644 (file)
@@ -29,7 +29,8 @@ end
 function sfinv.get_nav_fs(player, context, nav, current_idx)
        -- Only show tabs if there is more than one page
        if #nav > 1 then
-               return "tabheader[0,0;sfinv_nav_tabs;" .. table.concat(nav, ",") .. ";" .. current_idx .. ";true;false]"
+               return "tabheader[0,0;sfinv_nav_tabs;" .. table.concat(nav, ",") ..
+                               ";" .. current_idx .. ";true;false]"
        else
                return ""
        end
@@ -84,9 +85,20 @@ function sfinv.get_formspec(player, context)
                return page:get(player, context)
        else
                local old_page = context.page
-               context.page = sfinv.get_homepage_name(player)
+               local home_page = sfinv.get_homepage_name(player)
+
+               if old_page == home_page then
+                       minetest.log("error", "[sfinv] Couldn't find " .. dump(old_page) ..
+                                       ", which is also the old page")
+
+                       return ""
+               end
+
+               context.page = home_page
                assert(sfinv.pages[context.page], "[sfinv] Invalid homepage")
-               minetest.log("warning", "[sfinv] Couldn't find " .. dump(old_page) .. " so using switching to homepage")
+               minetest.log("warning", "[sfinv] Couldn't find " .. dump(old_page) ..
+                               " so switching to homepage")
+
                return sfinv.get_formspec(player, context)
        end
 end