neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 2f352217742cd7705582f17608e3784a88988ea5
parent ea124068f246eeb5e436c1fc62c9379d9b936f15
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Sun,  5 Oct 2025 10:21:44 +0800

fix(excmd): :trust executed even when inside false condition (#36032)

Problem:  :trust is executed even when inside false condition.
Solution: Make skip_cmd() return true for CMD_trust, as ex_trust() does
          not handle eap->skip itself.
Diffstat:
Mruntime/doc/editing.txt | 4++--
Msrc/nvim/ex_docmd.c | 1-
Mtest/functional/ex_cmds/trust_spec.lua | 16++++++++--------
3 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/runtime/doc/editing.txt b/runtime/doc/editing.txt @@ -1714,8 +1714,8 @@ mark a file as trusted or untrusted using the |:trust| command or the contents. The trust list is stored on disk, Nvim will re-use it after restarting. - [++deny] marks [file] (or current buffer if no [file]) as - untrusted: it will never be executed, 'exrc' will + [++deny] marks [file] (or current buffer if no [file]) + as untrusted: it will never be executed, 'exrc' will ignore it. [++remove] removes [file] (or current buffer if no diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c @@ -1951,7 +1951,6 @@ static bool skip_cmd(const exarg_T *eap) case CMD_throw: case CMD_tilde: case CMD_topleft: - case CMD_trust: case CMD_unlet: case CMD_unlockvar: case CMD_verbose: diff --git a/test/functional/ex_cmds/trust_spec.lua b/test/functional/ex_cmds/trust_spec.lua @@ -13,21 +13,21 @@ local fn = n.fn describe(':trust', function() local xstate = 'Xstate' - setup(function() - n.mkdir_p(xstate .. pathsep .. (is_os('win') and 'nvim-data' or 'nvim')) - end) - - teardown(function() - n.rmdir(xstate) - end) - before_each(function() + n.mkdir_p(xstate .. pathsep .. (is_os('win') and 'nvim-data' or 'nvim')) t.write_file('test_file', 'test') clear { env = { XDG_STATE_HOME = xstate } } end) after_each(function() os.remove('test_file') + n.rmdir(xstate) + end) + + it('is not executed when inside false condition', function() + command('edit test_file') + eq('', exec_capture('if 0 | trust | endif')) + eq(nil, vim.uv.fs_stat(fn.stdpath('state') .. pathsep .. 'trust')) end) it('trust then deny then remove a file using current buffer', function()