From f2ec8d4afc0623a477d198c42994544190b4e427 Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Tue, 8 Jul 2025 22:04:10 +0200 Subject: [PATCH] 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: #17680 closes: #17686 Signed-off-by: Girish Palya Signed-off-by: Christian Brabandt --- src/cmdexpand.c | 3 ++- src/testdir/test_cmdline.vim | 31 ++++++++++++++++++------------- src/version.c | 2 ++ 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/cmdexpand.c b/src/cmdexpand.c index 75efe1c623..bdfa679457 100644 --- a/src/cmdexpand.c +++ b/src/cmdexpand.c @@ -233,7 +233,6 @@ nextwild( if (xp->xp_numfiles == -1) { - may_expand_pattern = options & WILD_MAY_EXPAND_PATTERN; pre_incsearch_pos = xp->xp_pre_incsearch_pos; #ifdef FEAT_EVAL if (ccline->input_fn && ccline->xp_context == EXPAND_COMMANDS) @@ -244,7 +243,9 @@ nextwild( else #endif { + may_expand_pattern = options & WILD_MAY_EXPAND_PATTERN; set_expand_context(xp); + may_expand_pattern = FALSE; } cmd_showtail = expand_showtail(xp); } diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim index 47adb2b08f..46ace66161 100644 --- a/src/testdir/test_cmdline.vim +++ b/src/testdir/test_cmdline.vim @@ -4478,7 +4478,7 @@ func Test_search_complete() call feedkeys("gg/Fo\\", 'tx') call assert_equal(['Foobar', 'FooBARR'], g:compl_info.matches) call feedkeys("gg/FO\\", 'tx') - call assert_equal({}, g:compl_info) + call assert_equal({}, g:compl_info) call feedkeys("gg/\\cFo\\", 'tx') call assert_equal(['\cFoobar', '\cFooBAr', '\cFooBARR'], g:compl_info.matches) @@ -4498,7 +4498,12 @@ func Test_search_complete() call feedkeys("gg/Fo\\", 'tx') call assert_equal(['Foobar', 'FooBARR'], g:compl_info.matches) call feedkeys("gg/FO\\", '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\\", 'tx') call assert_equal(['foobar', 'foobarr'], g:compl_info.matches) call feedkeys("gg/\\Cfo\\", 'tx') @@ -4603,43 +4608,43 @@ func Test_range_complete() for trig in ["\", "\"] call feedkeys($":%s/a{trig}\", 'xt') - call assert_equal(['ab', 'a', 'af'], g:compl_info.matches) + call assert_equal(['ab', 'a', 'af'], g:compl_info.matches) call feedkeys($":vim9cmd :%s/a{trig}\", 'xt') - call assert_equal(['ab', 'a', 'af'], g:compl_info.matches) + call assert_equal(['ab', 'a', 'af'], g:compl_info.matches) endfor call feedkeys(":%s/\\", 'xt') - call assert_equal({}, g:compl_info) + call assert_equal({}, g:compl_info) for cmd in ['s', 'g'] - call feedkeys(":1,2" . cmd . "/a\\", 'xt') - call assert_equal(['ab', 'a'], g:compl_info.matches) + call feedkeys($":1,2{cmd}/a\\", 'xt') + call assert_equal(['ab', 'a'], g:compl_info.matches) endfor 1 call feedkeys(":.,+2s/a\\", 'xt') - call assert_equal(['ab', 'a'], g:compl_info.matches) + call assert_equal(['ab', 'a'], g:compl_info.matches) /f call feedkeys(":1,s/b\\", 'xt') - call assert_equal(['b', 'ba'], g:compl_info.matches) + call assert_equal(['b', 'ba'], g:compl_info.matches) /c call feedkeys(":\\?,4s/a\\", 'xt') - call assert_equal(['a', 'af'], g:compl_info.matches) + call assert_equal(['a', 'af'], g:compl_info.matches) %s/c/c/ call feedkeys(":1,\\&s/a\\", 'xt') - call assert_equal(['ab', 'a'], g:compl_info.matches) + call assert_equal(['ab', 'a'], g:compl_info.matches) 3 normal! ma call feedkeys(":'a,$s/a\\", 'xt') - call assert_equal(['a', 'af'], g:compl_info.matches) + call assert_equal(['a', 'af'], g:compl_info.matches) " Line number followed by a search pattern ([start]/pattern/[command]) call feedkeys("3/a\\", 'xt') - call assert_equal(['a', 'af', 'ab'], g:compl_info.matches) + call assert_equal(['a', 'af', 'ab'], g:compl_info.matches) bw! call test_override("char_avail", 0) diff --git a/src/version.c b/src/version.c index c84096053c..e8979f9cba 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1528, /**/ 1527, /**/