summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-12-16 19:45:47 +0000
committerBram Moolenaar <Bram@vim.org>2021-12-16 19:45:47 +0000
commit94c785d235dccacf6cdf38c5903115b61ca8a981 (patch)
tree3204a2a0811c246c194a2f47b90c6023db790e3e
parent8103527da7f12ff21c2566222748518ee093432c (diff)
patch 8.2.3829: no error when setting a func option to script-local functionv8.2.3829
Problem: No error when setting a func option to a script-local function. Solution: Give an error if the name starts with "s:". (closes #9358)
-rw-r--r--src/option.c3
-rw-r--r--src/testdir/dumps/Test_set_tagfunc_on_cmdline.dump6
-rw-r--r--src/testdir/test_tagfunc.vim11
-rw-r--r--src/version.c2
4 files changed, 22 insertions, 0 deletions
diff --git a/src/option.c b/src/option.c
index 739b29adfa..de6e562c26 100644
--- a/src/option.c
+++ b/src/option.c
@@ -7199,6 +7199,9 @@ option_set_callback_func(char_u *optval UNUSED, callback_T *optcb UNUSED)
return OK;
}
+ if (STRNCMP(optval, "s:", 2) == 0 && !SCRIPT_ID_VALID(current_sctx.sc_sid))
+ return FAIL;
+
if (*optval == '{' || (in_vim9script() && *optval == '(')
|| (STRNCMP(optval, "function(", 9) == 0)
|| (STRNCMP(optval, "funcref(", 8) == 0))
diff --git a/src/testdir/dumps/Test_set_tagfunc_on_cmdline.dump b/src/testdir/dumps/Test_set_tagfunc_on_cmdline.dump
new file mode 100644
index 0000000000..b81d99cfca
--- /dev/null
+++ b/src/testdir/dumps/Test_set_tagfunc_on_cmdline.dump
@@ -0,0 +1,6 @@
+| +0&#ffffff0@74
+@75
+@75
+|E+0#ffffff16#e000002|r@1|o|r| |d|e|t|e|c|t|e|d| |w|h|i|l|e| |p|r|o|c|e|s@1|i|n|g| |c|o|m@1|a|n|d| |l|i|n|e|:| +0#0000000#ffffff0@29
+|E+0#ffffff16#e000002|4|7|4|:| |I|n|v|a|l|i|d| |a|r|g|u|m|e|n|t|:| |t|a|g|f|u|n|c|=|s|:|F|u|n|c| +0#0000000#ffffff0@36
+|P+0#00e0003&|r|e|s@1| |E|N|T|E|R| |o|r| |t|y|p|e| |c|o|m@1|a|n|d| |t|o| |c|o|n|t|i|n|u|e> +0#0000000&@35
diff --git a/src/testdir/test_tagfunc.vim b/src/testdir/test_tagfunc.vim
index cdadbac5cc..d07aa077cd 100644
--- a/src/testdir/test_tagfunc.vim
+++ b/src/testdir/test_tagfunc.vim
@@ -1,6 +1,8 @@
" Test 'tagfunc'
source vim9.vim
+source check.vim
+source screendump.vim
func TagFunc(pat, flag, info)
let g:tagfunc_args = [a:pat, a:flag, a:info]
@@ -342,4 +344,13 @@ func Test_tagfunc_callback()
%bw!
endfunc
+func Test_set_tagfunc_on_cmdline()
+ CheckScreendump
+
+ let buf = RunVimInTerminal(' +"set tagfunc=s:Func"', #{rows: 6, wait_for_ruler: 0})
+ call VerifyScreenDump(buf, 'Test_set_tagfunc_on_cmdline', {})
+ call StopVimInTerminal(buf)
+endfunc
+
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index f7187769c8..622fe76af9 100644
--- a/src/version.c
+++ b/src/version.c
@@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3829,
+/**/
3828,
/**/
3827,