]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.1401: list not materialized in prop_list() v9.1.1401
authorChristian Brabandt <cb@256bit.org>
Wed, 21 May 2025 19:01:40 +0000 (21:01 +0200)
committerChristian Brabandt <cb@256bit.org>
Wed, 21 May 2025 19:01:40 +0000 (21:01 +0200)
Problem:  list not materialized in prop_list()
          (Nickwiz)
Solution: materialize list before accessing it

fixes: #17298
closes: #17349

Signed-off-by: Christian Brabandt <cb@256bit.org>
src/testdir/test_textprop.vim
src/textprop.c
src/version.c

index d26efa9489c9decfe13a111276e3a979e9509770..bcf83cab8fb2a0163396d31d0899dde14c919696 100644 (file)
@@ -4757,4 +4757,29 @@ func Test_textprop_with_wincolor()
   call StopVimInTerminal(buf)
 endfunc
 
+func Test_textprop_materialize_list()
+       let ids = range(3)
+       call assert_equal([], prop_list(1, #{ids: ids}))
+
+       let ids = range(3) + []
+       call assert_equal([], prop_list(1, #{ids: ids}))
+
+       let ids = range(3)
+       let ids[0] = ids[0]
+       call assert_equal([], prop_list(1, #{ids: ids}))
+
+       let ids = range(3)
+       call assert_equal([], prop_list(1, #{ids: ids}))
+
+       call assert_equal([], prop_list(1, #{ids: range(3) + [] }))
+
+       let ids = range(3)
+       call assert_equal([], prop_list(1, #{ids: ids}))
+
+       let ids = range(0, 3)
+       call assert_equal([], prop_list(1, #{ids: ids}))
+
+       call assert_equal([], prop_list(1, #{ids: 3->range()}))
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index d16f8ecef3abe3fae44d3c45241690e4aecdcc1a..a06605d3ddebc6d15b13297a1ba99276698f82fa 100644 (file)
@@ -1439,7 +1439,7 @@ get_prop_ids_from_list(list_T *l, int *num_ids)
 {
     int                *prop_ids;
     listitem_T *li;
-    int                i;
+    int                i = 0;
     int                id;
     int                error;
 
@@ -1449,7 +1449,7 @@ get_prop_ids_from_list(list_T *l, int *num_ids)
     if (prop_ids == NULL)
        return NULL;
 
-    i = 0;
+    CHECK_LIST_MATERIALIZE(l);
     FOR_ALL_LIST_ITEMS(l, li)
     {
        error = FALSE;
index a6c749dc0547348ff908e0df12206e8f59ecd6f2..252c1437bf47c4b742c7562cd3aea768d485cafc 100644 (file)
@@ -709,6 +709,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1401,
 /**/
     1400,
 /**/