luci-base: fix rendering of 404 HTML error template
authorJo-Philipp Wich <jo@mein.io>
Tue, 10 Apr 2018 10:03:15 +0000 (12:03 +0200)
committerJo-Philipp Wich <jo@mein.io>
Tue, 10 Apr 2018 10:03:15 +0000 (12:03 +0200)
This 404 error template rendering has been broken for a long time due to bad
function environment level in luci.template when invoking the rendering from
the toplevel dispatcher context.

Fix this issue by adding a local function indirection, essentially adding an
additional stack frame.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
modules/luci-base/luasrc/dispatcher.lua

index fc497ca9f34f548dfa15e5515b88674f1325ffe0..5fc2b80e710c15a7bce50a2490d7316a824a4984 100644 (file)
@@ -75,11 +75,16 @@ function error404(message)
        http.status(404, "Not Found")
        message = message or "Not Found"
 
-       require("luci.template")
-       if not util.copcall(luci.template.render, "error404") then
+       local function render()
+               local template = require "luci.template"
+               template.render("error404")
+       end
+
+       if not util.copcall(render) then
                http.prepare_content("text/plain")
                http.write(message)
        end
+
        return false
 end