Mercurial > vim
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; } }