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.

Raspunde prin e-mail lui