diff options
| author | Francesco Abbate <francesco.bbt@gmail.com> | 2021-04-06 17:50:46 +0200 |
|---|---|---|
| committer | Francesco Abbate <francesco.bbt@gmail.com> | 2021-04-06 17:50:46 +0200 |
| commit | d7cc1f9f9d75c4e388845fc74bcbebbf254a0c07 (patch) | |
| tree | 95cc92b98e634e073a224cca850eb3fac840ee38 /data/core/init.lua | |
| parent | b4ba209b295b51a4f5946eba662e49d7cee47d01 (diff) | |
| download | lite-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.lua | 36 |
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 |
