aboutsummaryrefslogtreecommitdiff
path: root/data/core/init.lua
diff options
context:
space:
mode:
authorFrancesco Abbate <francesco.bbt@gmail.com>2021-04-06 17:50:46 +0200
committerFrancesco Abbate <francesco.bbt@gmail.com>2021-04-06 17:50:46 +0200
commitd7cc1f9f9d75c4e388845fc74bcbebbf254a0c07 (patch)
tree95cc92b98e634e073a224cca850eb3fac840ee38 /data/core/init.lua
parentb4ba209b295b51a4f5946eba662e49d7cee47d01 (diff)
downloadlite-xl-d7cc1f9f9d75c4e388845fc74bcbebbf254a0c07.tar.gz
lite-xl-d7cc1f9f9d75c4e388845fc74bcbebbf254a0c07.zip
Add plugin verification by version tag
Diffstat (limited to 'data/core/init.lua')
-rw-r--r--data/core/init.lua36
1 files changed, 35 insertions, 1 deletions
diff --git a/data/core/init.lua b/data/core/init.lua
index d1118a45..59944c9a 100644
--- a/data/core/init.lua
+++ b/data/core/init.lua
@@ -552,6 +552,35 @@ function core.restart()
end
+local function version_components(version)
+ local a, b, c = version:match('(%d+)%.(%d+)%.(%d+)')
+ if a then
+ return tonumber(a), tonumber(b), tonumber(c)
+ end
+ a, b = version:match('(%d+)%.(%d+)')
+ if a then
+ return tonumber(a), tonumber(b)
+ end
+end
+
+
+local function check_plugin_version(filename)
+ local f = io.open(filename, "r")
+ if not f then return false end
+ local version_match = false
+ for line in f:lines() do
+ local version = line:match('%-%-%s*lite%-xl%s*(%d+%.%d+)%s*$')
+ if not version then break end
+ local ver_major, ver_minor = version_components(version)
+ local ref_major, ref_minor = version_components(VERSION)
+ version_match = (ver_major == ref_major and ver_minor == ref_minor)
+ break
+ end
+ f:close()
+ return version_match
+end
+
+
function core.load_plugins()
local no_errors = true
for _, root_dir in ipairs {USERDIR, DATADIR} do
@@ -559,7 +588,12 @@ function core.load_plugins()
local files = system.list_dir(plugin_dir)
for _, filename in ipairs(files or {}) do
local basename = filename:match("(.-)%.lua$") or filename
- if config[basename] ~= false then
+ local version_match = check_plugin_version(plugin_dir .. '/' .. filename)
+ if not version_match then
+ core.log_quiet("Version mismatch for plugin %q from %s", basename, plugin_dir)
+ no_errors = false
+ end
+ if version_match and config[basename] ~= false then
local modname = "plugins." .. basename
local ok = core.try(require, modname)
if ok then core.log_quiet("Loaded plugin %q from %s", basename, plugin_dir) end