plugin(fix): catch crash with pcall in event handlers

pull/2799/head
Qingping Hou 7 years ago
parent f2671a3e20
commit 8df1e14b6f

@ -3,6 +3,25 @@ local logger = require("logger")
local DEFAULT_PLUGIN_PATH = "plugins"
local function sandboxPluginEventHandlers(plugin)
for key, value in pairs(plugin) do
if key:sub(1, 2) == "on" and type(value) == "function" then
plugin[key] = function(self, ...)
local ok, re = pcall(value, self, ...)
if ok then
return re
else
logger.err("failed to call event handler", key, re)
return false
end
end
end
end
end
local PluginLoader = {}
function PluginLoader:loadPlugins()
@ -47,6 +66,7 @@ function PluginLoader:loadPlugins()
elseif type(plugin_module.disabled) ~= "boolean" or not plugin_module.disabled then
plugin_module.path = plugin_root
plugin_module.name = plugin_module.name or plugin_root:match("/(.-)%.koplugin")
sandboxPluginEventHandlers(plugin_module)
table.insert(self.plugins, plugin_module)
else
logger.info("Plugin ", mainfile, " has been disabled.")

Loading…
Cancel
Save