From: Bram Moolenaar Date: Mon, 5 Jun 2023 18:46:18 +0000 (+0100) Subject: patch 9.0.1611: v:maxcol can be changed in a :for loop X-Git-Tag: v9.0.1611 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=16d2c02c80e6d4822010816e085cabf91bf91423;p=thirdparty%2Fvim.git patch 9.0.1611: v:maxcol can be changed in a :for loop Problem: v:maxcol can be changed in a :for loop. Solution: Check for read-only loop variable. (closes #12470) --- 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 @@ -695,6 +695,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1611, /**/ 1610, /**/