patch 9.1.0065: Segfault with CompleteChanged autocommand
Commit:
https://github.com/vim/vim/commit/fef66301665027f1801a18d796f74584666f41ef
Author: Christian Brabandt <[email protected]>
Date: Mon Jan 29 21:46:58 2024 +0100
patch 9.1.0065: Segfault with CompleteChanged autocommand
Problem: Segfault with CompleteChanged autocommand
(markonm )
Solution: Test match->cp_prev for being NULL before accessing it
closes: #13929
Signed-off-by: Christian Brabandt <[email protected]>
diff --git a/src/insexpand.c b/src/insexpand.c
index e87014701..ba66e51cf 100644
--- a/src/insexpand.c
+++ b/src/insexpand.c
@@ -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))
{
diff --git a/src/testdir/test_ins_complete.vim
b/src/testdir/test_ins_complete.vim
index 61ddcd378..1b6eafe8f 100644
--- a/src/testdir/test_ins_complete.vim
+++ b/src/testdir/test_ins_complete.vim
@@ -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
diff --git a/src/version.c b/src/version.c
index cf123b5b2..b361a9caa 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 65,
/**/
64,
/**/
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/E1rUYja-002Fyu-9P%40256bit.org.