patch 9.2.0517: quickfix: can set quickfixtextfunc in restricted/sandbox mode
Commit: https://github.com/vim/vim/commit/cb8510d4703c13b34e178067ffe48a24c9a3ad32 Author: Yegappan Lakshmanan <[email protected]> Date: Sat May 23 18:16:22 2026 +0000 patch 9.2.0517: quickfix: can set quickfixtextfunc in restricted/sandbox mode Problem: quickfix: can set quickfixtextfunc in restricted/sandbox mode (tacdm) Solution: Disallow setting the quickfixtextfunc option from a sandbox and restricted mode (Yegappan Lakshmanan). closes: #20305 Co-Authored-by: tacdm Signed-off-by: Yegappan Lakshmanan <[email protected]> Signed-off-by: Christian Brabandt <[email protected]> diff --git a/src/quickfix.c b/src/quickfix.c index feeec1812..3fe015ee5 100644 --- a/src/quickfix.c +++ b/src/quickfix.c @@ -8173,13 +8173,16 @@ qf_setprop_curidx(qf_info_T *qi, qf_list_T *qfl, dictitem_T *di) } /* - * Set the current index in the specified quickfix list + * Set the 'quickfixtextfunc' in the specified quickfix/location list */ static int qf_setprop_qftf(qf_info_T *qi UNUSED, qf_list_T *qfl, dictitem_T *di) { callback_T cb; + if (check_restricted() || check_secure()) + return FAIL; + free_callback(&qfl->qf_qftf_cb); cb = get_callback(&di->di_tv); if (cb.cb_name == NULL || *cb.cb_name == NUL) diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim index 64ec97f50..e1dbaa7c5 100644 --- a/src/testdir/test_quickfix.vim +++ b/src/testdir/test_quickfix.vim @@ -7028,4 +7028,38 @@ func Test_efm_overlongline() call setqflist([], 'f') endfunc +func Xtest_set_qftf_in_sandbox(cchar) + call s:setup_commands(a:cchar) + + call g:Xsetlist([{'filename': 'test.c', 'lnum': 1, 'text': 'trigger'}]) + let g:qftf_fn_called = v:false + func Qftf_Fn(d) + let g:qftf_fn_called = v:true + return [] + endfunc + + let g:caught_exception = v:false + try + sandbox call g:Xsetlist([], 'a', #{quickfixtextfunc: 'g:Qftf_Fn'}) + catch /E48:/ + let g:caught_exception = v:true + endtry + copen + cclose + + call assert_equal(v:true, g:caught_exception) + call assert_equal(v:false, g:qftf_fn_called) + + delfunc Qftf_Fn + unlet g:caught_exception + unlet g:qftf_fn_called + %bw! +endfunc + +" Test for setting the 'quickfixtextfunc' in a sandbox +func Test_set_qftf_in_sandbox() + call Xtest_set_qftf_in_sandbox('c') + call Xtest_set_qftf_in_sandbox('l') +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/testdir/test_restricted.vim b/src/testdir/test_restricted.vim index d9810826a..21133089e 100644 --- a/src/testdir/test_restricted.vim +++ b/src/testdir/test_restricted.vim @@ -95,6 +95,7 @@ func Test_restricted_mode() if has('unix') call assert_fails('cd `pwd`', 'E145:') endif + call assert_fails("call setqflist([], 'a', {'id': 1, 'quickfixtextfunc': 'tr'})", 'E145:') call writefile(v:errors, 'Xresult') qa! diff --git a/src/version.c b/src/version.c index 92eea5baa..f3dd63e77 100644 --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 517, /**/ 516, /**/ -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion visit https://groups.google.com/d/msgid/vim_dev/E1wQr6q-002hBC-HL%40256bit.org.
