diff src/list.c @ 28273:fff70771d4bb v8.2.4662

patch 8.2.4662: no error for using out of range list index Commit: https://github.com/vim/vim/commit/22ebd172e48ba060c8a7bae3dbf6480b7596d937 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Apr 1 15:26:58 2022 +0100 patch 8.2.4662: no error for using out of range list index Problem: No error for using out of range list index. Solution: Check list index at script level like in compiled function. (closes #10051)
author Bram Moolenaar <Bram@vim.org>
date Fri, 01 Apr 2022 16:30:03 +0200
parents 183ae001d99d
children 175eacde28b8
line wrap: on
line diff
--- a/src/list.c
+++ b/src/list.c
@@ -760,18 +760,20 @@ list_insert(list_T *l, listitem_T *ni, l
 
 /*
  * Get the list item in "l" with index "n1".  "n1" is adjusted if needed.
- * In Vim9, it is at the end of the list, add an item.
+ * In Vim9, it is at the end of the list, add an item if "can_append" is TRUE.
  * Return NULL if there is no such item.
  */
     listitem_T *
-check_range_index_one(list_T *l, long *n1, int quiet)
+check_range_index_one(list_T *l, long *n1, int can_append, int quiet)
 {
-    listitem_T *li = list_find_index(l, n1);
+    long	orig_n1 = *n1;
+    listitem_T	*li = list_find_index(l, n1);
 
     if (li == NULL)
     {
 	// Vim9: Allow for adding an item at the end.
-	if (in_vim9script() && *n1 == l->lv_len && l->lv_lock == 0)
+	if (can_append && in_vim9script()
+					&& *n1 == l->lv_len && l->lv_lock == 0)
 	{
 	    list_append_number(l, 0);
 	    li = list_find_index(l, n1);
@@ -779,7 +781,7 @@ check_range_index_one(list_T *l, long *n
 	if (li == NULL)
 	{
 	    if (!quiet)
-		semsg(_(e_list_index_out_of_range_nr), *n1);
+		semsg(_(e_list_index_out_of_range_nr), orig_n1);
 	    return NULL;
 	}
     }