vim-patch:9.1.1528: completion: crash with getcompletion()

Problem:  completion: crash with getcompletion()
          (zeertzjq)
Solution: Don't set may_expand_pattern in f_getcompletion(),
          unset may_expand_pattern() once it is not longer needed
          (Girish Palya).

fixes: vim/vim#17680
closes: vim/vim#17686

f2ec8d4afc

Co-authored-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
zeertzjq
2025-07-09 07:47:15 +08:00
parent ef0ec7edac
commit 5fe310c5e6
2 changed files with 20 additions and 14 deletions

View File

@@ -249,13 +249,14 @@ int nextwild(expand_T *xp, int type, int options, bool escape)
char *p; char *p;
if (xp->xp_numfiles == -1) { if (xp->xp_numfiles == -1) {
may_expand_pattern = options & WILD_MAY_EXPAND_PATTERN;
pre_incsearch_pos = xp->xp_pre_incsearch_pos; pre_incsearch_pos = xp->xp_pre_incsearch_pos;
if (ccline->input_fn && ccline->xp_context == EXPAND_COMMANDS) { if (ccline->input_fn && ccline->xp_context == EXPAND_COMMANDS) {
// Expand commands typed in input() function // Expand commands typed in input() function
set_cmd_context(xp, ccline->cmdbuff, ccline->cmdlen, ccline->cmdpos, false); set_cmd_context(xp, ccline->cmdbuff, ccline->cmdlen, ccline->cmdpos, false);
} else { } else {
may_expand_pattern = options & WILD_MAY_EXPAND_PATTERN;
set_expand_context(xp); set_expand_context(xp);
may_expand_pattern = false;
} }
if (xp->xp_context == EXPAND_LUA) { if (xp->xp_context == EXPAND_LUA) {
nlua_expand_pat(xp); nlua_expand_pat(xp);

View File

@@ -4526,6 +4526,11 @@ func Test_search_complete()
call assert_equal(['Foobar', 'FooBARR'], g:compl_info.matches) call assert_equal(['Foobar', 'FooBARR'], g:compl_info.matches)
call feedkeys("gg/FO\<tab>\<f9>", 'tx') call feedkeys("gg/FO\<tab>\<f9>", 'tx')
call assert_equal({}, g:compl_info) call assert_equal({}, g:compl_info)
" Issue #17680 (getcompletion() does not support search completion)
let result = getcompletion('%s/', 'cmdline')
call assert_equal([], result)
call feedkeys("gg/foob\<tab>\<f9>", 'tx') call feedkeys("gg/foob\<tab>\<f9>", 'tx')
call assert_equal(['foobar', 'foobarr'], g:compl_info.matches) call assert_equal(['foobar', 'foobarr'], g:compl_info.matches)
call feedkeys("gg/\\Cfo\<tab>\<f9>", 'tx') call feedkeys("gg/\\Cfo\<tab>\<f9>", 'tx')
@@ -4640,7 +4645,7 @@ func Test_range_complete()
call assert_equal({}, g:compl_info) call assert_equal({}, g:compl_info)
for cmd in ['s', 'g'] for cmd in ['s', 'g']
call feedkeys(":1,2" . cmd . "/a\<c-z>\<f9>", 'xt') call feedkeys($":1,2{cmd}/a\<c-z>\<f9>", 'xt')
call assert_equal(['ab', 'a'], g:compl_info.matches) call assert_equal(['ab', 'a'], g:compl_info.matches)
endfor endfor