forked from aniani/vim
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 <cb@256bit.org>
This commit is contained in:
@@ -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
|
// 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.
|
// 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))
|
while (match != NULL && !match_at_original_text(match))
|
||||||
{
|
{
|
||||||
|
@@ -2359,4 +2359,18 @@ func Test_complete_info_index()
|
|||||||
bwipe!
|
bwipe!
|
||||||
endfunc
|
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
|
||||||
|
@@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
65,
|
||||||
/**/
|
/**/
|
||||||
64,
|
64,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user