patch 9.1.0665: Locked variable can be changed in a :for loop
Problem: Locked variable can be changed in a :for loop.
Solution: Always do a full permission check on the first loop iteration
where ASSIGN_DECL is not set (zeertzjq).
related: #12470
fixes: #15450
closes: #15454
Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/evalvars.c b/src/evalvars.c
index 6facbeb..f18b516 100644
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -4100,7 +4100,7 @@
// Modifying a final variable with a List value using the "+="
// operator is allowed. For other types, it is not allowed.
- if (((flags & ASSIGN_FOR_LOOP) == 0
+ if ((((flags & ASSIGN_FOR_LOOP) == 0 || (flags & ASSIGN_DECL) == 0)
&& ((flags & ASSIGN_COMPOUND_OP) == 0
|| !type_inplace_modifiable))
? var_check_permission(di, name) == FAIL