]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.0065: Segfault with CompleteChanged autocommand v9.1.0065
authorChristian Brabandt <cb@256bit.org>
Mon, 29 Jan 2024 20:46:58 +0000 (21:46 +0100)
committerChristian Brabandt <cb@256bit.org>
Mon, 29 Jan 2024 20:49:36 +0000 (21:49 +0100)
Problem:  Segfault with CompleteChanged autocommand
          (markonm )
Solution: Test match->cp_prev for being NULL before accessing it

closes: #13929

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

index e8701470123e5248af63791b9afdb172983683c5..ba66e51cfb7c4adcb41dd8f7b28aad2b174afd28 100644 (file)
@@ -3075,7 +3075,8 @@ info_add_completion_info(list_T *li)
 
     // Skip the element with the CP_ORIGINAL_TEXT flag at the beginning, in case of
     // forward completion, or at the end, in case of backward completion.
-    match = forward ? match->cp_next : (compl_no_select && match_at_original_text(match) ? match->cp_prev : match->cp_prev->cp_prev);
+    match = forward || match->cp_prev == NULL ? match->cp_next :
+       (compl_no_select && match_at_original_text(match) ? match->cp_prev : match->cp_prev->cp_prev);
 
     while (match != NULL && !match_at_original_text(match))
     {
index 61ddcd378b0916eac26b2faf470014634e46e0fc..1b6eafe8f015120c53ac3de5b6366ea9b34cf119 100644 (file)
@@ -2359,4 +2359,18 @@ func Test_complete_info_index()
   bwipe!
 endfunc
 
-" vim: shiftwidth=2 sts=2 expandtab
+func Test_complete_changed_complete_info()
+  CheckRunVimInTerminal
+  " this used to crash vim, see #13929
+  let lines =<< trim END
+    set completeopt=menuone
+    autocmd CompleteChanged * call complete_info(['items'])
+    call feedkeys("iii\<cr>\<c-p>")
+  END
+  call writefile(lines, 'Xsegfault', 'D')
+  let buf = RunVimInTerminal('-S Xsegfault', #{rows: 5})
+  call WaitForAssert({-> assert_match('^ii', term_getline(buf, 1))}, 1000)
+  call StopVimInTerminal(buf)
+endfunc
+
+" vim: shiftwidth=2 sts=2 expandtab nofoldenable
index cf123b5b2a299b910637b3af141630178aa1a2e0..b361a9caa0a9a37135d58bf575dffce9770a5eb1 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    65,
 /**/
     64,
 /**/