summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2023-06-05 19:46:18 +0100
committerBram Moolenaar <Bram@vim.org>2023-06-05 19:46:18 +0100
commit16d2c02c80e6d4822010816e085cabf91bf91423 (patch)
tree37a68424ac179f9fa5afff734ed79d2dfc9940ba
parentd9a92dc70b20c76cef9ca186676583c92c14311c (diff)
patch 9.0.1611: v:maxcol can be changed in a :for loopv9.0.1611
Problem: v:maxcol can be changed in a :for loop. Solution: Check for read-only loop variable. (closes #12470)
-rw-r--r--src/evalvars.c3
-rw-r--r--src/testdir/test_eval_stuff.vim1
-rw-r--r--src/version.c2
3 files changed, 5 insertions, 1 deletions
diff --git a/src/evalvars.c b/src/evalvars.c
index bebee2a5bc..35a1d20831 100644
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -3842,7 +3842,8 @@ set_var_const(
}
if ((flags & ASSIGN_FOR_LOOP) == 0
- && var_check_permission(di, name) == FAIL)
+ ? var_check_permission(di, name) == FAIL
+ : var_check_ro(di->di_flags, name, FALSE))
goto failed;
}
else
diff --git a/src/testdir/test_eval_stuff.vim b/src/testdir/test_eval_stuff.vim
index 46ec12df16..a346399eb5 100644
--- a/src/testdir/test_eval_stuff.vim
+++ b/src/testdir/test_eval_stuff.vim
@@ -126,6 +126,7 @@ func Test_for_invalid()
call assert_fails("for x in 99", 'E1098:')
call assert_fails("for x in function('winnr')", 'E1098:')
call assert_fails("for x in {'a': 9}", 'E1098:')
+ call assert_fails("for v:maxcol in range(1)", 'E46:')
if 0
/1/5/2/s/\n
diff --git a/src/version.c b/src/version.c
index a8f2104698..2e3c240f6e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1611,
+/**/
1610,
/**/
1609,