]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.2.0380: completion: a few issues in completion code v9.2.0380
authorglepnir <glephunter@gmail.com>
Mon, 20 Apr 2026 17:36:56 +0000 (17:36 +0000)
committerChristian Brabandt <cb@256bit.org>
Mon, 20 Apr 2026 17:36:56 +0000 (17:36 +0000)
Problem: ins_compl_stop() sets compl_best_matches = 0, but that's a
         pointer, should reset compl_num_bests instead,
         find_common_prefix() reads cpt_sources_array[cur_source] without
         checking cur_source != -1 which causes an OOB for -1,
         find_next_completion_match(): second `if` in the pending loop
         should be `else if`. Forward paging only moves one step per call.

Solution: Reset compl_num_bests instead, add a check for cur_source not
          equal -1, change if to else if (glepnir)

closes: #20000

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/insexpand.c
src/version.c

index 019557cab779d6de9bb1c4c5637a14900bc61a8e..0019c7eb45926881916a0d2774c646f04788ea83 100644 (file)
@@ -3034,7 +3034,7 @@ ins_compl_stop(int c, int prev_mode, int retval)
     }
     compl_autocomplete = FALSE;
     compl_from_nonkeyword = FALSE;
-    compl_best_matches = 0;
+    compl_num_bests = 0;
     compl_ins_end_col = 0;
 
     if (c == Ctrl_C && cmdwin_type != 0)
@@ -5795,7 +5795,8 @@ find_common_prefix(size_t *prefix_len, int curbuf_only)
            }
 
            if (!match_limit_exceeded && (!curbuf_only
-                       || cpt_sources_array[cur_source].cs_flag == '.'))
+                       || (cur_source != -1
+                           && cpt_sources_array[cur_source].cs_flag == '.')))
            {
                if (first == NULL && STRNCMP(ins_compl_leader(),
                            compl->cp_str.string, ins_compl_leader_len()) == 0)
@@ -6076,7 +6077,7 @@ find_next_completion_match(
                    compl_shown_match = compl_shown_match->cp_next;
                    --compl_pending;
                }
-               if (compl_pending < 0 && compl_shown_match->cp_prev != NULL)
+               else if (compl_pending < 0 && compl_shown_match->cp_prev != NULL)
                {
                    compl_shown_match = compl_shown_match->cp_prev;
                    ++compl_pending;
index d2d4b141ca3982f432f19728f2ec321978ef8b16..ddac9aa6da3d6fe929a77872649b1b397657d53c 100644 (file)
@@ -734,6 +734,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    380,
 /**/
     379,
 /**/