patch 9.1.1554: crash when omni-completion opens command-line window

Problem:  Vim crashes during omnifunc completion inside the command-line
          window ("q:") if the completion item attempts to open an "info"
          preview window. This leads to a failed assert during execution.
Solution: Avoid opening preview windows while inside the command-line
          window to prevent the crash (Girish Palya).

closes: #17764

Co-authored-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Girish Palya <girishji@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Girish Palya
2025-07-16 18:54:54 +02:00
committed by Christian Brabandt
parent 7dd8ee2103
commit e4fdb1e4e7
4 changed files with 99 additions and 82 deletions

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-07-16 18:34+0200\n" "POT-Creation-Date: 2025-07-16 18:54+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -4257,327 +4257,327 @@ msgstr ""
msgid "%s (%s, compiled %s)" msgid "%s (%s, compiled %s)"
msgstr "" msgstr ""
#: ../version.c:4040 #: ../version.c:4042
msgid "" msgid ""
"\n" "\n"
"MS-Windows ARM64 GUI/console version" "MS-Windows ARM64 GUI/console version"
msgstr "" msgstr ""
#: ../version.c:4042 #: ../version.c:4044
msgid "" msgid ""
"\n" "\n"
"MS-Windows 64-bit GUI/console version" "MS-Windows 64-bit GUI/console version"
msgstr "" msgstr ""
#: ../version.c:4045 #: ../version.c:4047
msgid "" msgid ""
"\n" "\n"
"MS-Windows 32-bit GUI/console version" "MS-Windows 32-bit GUI/console version"
msgstr "" msgstr ""
#: ../version.c:4050 #: ../version.c:4052
msgid "" msgid ""
"\n" "\n"
"MS-Windows ARM64 GUI version" "MS-Windows ARM64 GUI version"
msgstr "" msgstr ""
#: ../version.c:4052 #: ../version.c:4054
msgid "" msgid ""
"\n" "\n"
"MS-Windows 64-bit GUI version" "MS-Windows 64-bit GUI version"
msgstr "" msgstr ""
#: ../version.c:4055 #: ../version.c:4057
msgid "" msgid ""
"\n" "\n"
"MS-Windows 32-bit GUI version" "MS-Windows 32-bit GUI version"
msgstr "" msgstr ""
#: ../version.c:4059 #: ../version.c:4061
msgid " with OLE support" msgid " with OLE support"
msgstr "" msgstr ""
#: ../version.c:4064
msgid ""
"\n"
"MS-Windows ARM64 console version"
msgstr ""
#: ../version.c:4066 #: ../version.c:4066
msgid "" msgid ""
"\n" "\n"
"MS-Windows ARM64 console version"
msgstr ""
#: ../version.c:4068
msgid ""
"\n"
"MS-Windows 64-bit console version" "MS-Windows 64-bit console version"
msgstr "" msgstr ""
#: ../version.c:4069 #: ../version.c:4071
msgid "" msgid ""
"\n" "\n"
"MS-Windows 32-bit console version" "MS-Windows 32-bit console version"
msgstr "" msgstr ""
#: ../version.c:4075 #: ../version.c:4077
msgid "" msgid ""
"\n" "\n"
"macOS version" "macOS version"
msgstr "" msgstr ""
#: ../version.c:4077 #: ../version.c:4079
msgid "" msgid ""
"\n" "\n"
"macOS version w/o darwin feat." "macOS version w/o darwin feat."
msgstr "" msgstr ""
#: ../version.c:4087 #: ../version.c:4089
msgid "" msgid ""
"\n" "\n"
"OpenVMS version" "OpenVMS version"
msgstr "" msgstr ""
#: ../version.c:4102 #: ../version.c:4104
msgid "" msgid ""
"\n" "\n"
"Included patches: " "Included patches: "
msgstr "" msgstr ""
#: ../version.c:4127 #: ../version.c:4129
msgid "" msgid ""
"\n" "\n"
"Extra patches: " "Extra patches: "
msgstr "" msgstr ""
#: ../version.c:4139 ../version.c:4450 #: ../version.c:4141 ../version.c:4452
msgid "Modified by " msgid "Modified by "
msgstr "" msgstr ""
#: ../version.c:4146 #: ../version.c:4148
msgid "" msgid ""
"\n" "\n"
"Compiled " "Compiled "
msgstr "" msgstr ""
#: ../version.c:4149 #: ../version.c:4151
msgid "by " msgid "by "
msgstr "" msgstr ""
#: ../version.c:4161
msgid ""
"\n"
"Huge version "
msgstr ""
#: ../version.c:4163 #: ../version.c:4163
msgid "" msgid ""
"\n" "\n"
"Normal version " "Huge version "
msgstr "" msgstr ""
#: ../version.c:4165 #: ../version.c:4165
msgid "" msgid ""
"\n" "\n"
"Normal version "
msgstr ""
#: ../version.c:4167
msgid ""
"\n"
"Tiny version " "Tiny version "
msgstr "" msgstr ""
#: ../version.c:4168 #: ../version.c:4170
msgid "without GUI." msgid "without GUI."
msgstr "" msgstr ""
#: ../version.c:4171 #: ../version.c:4173
msgid "with GTK3 GUI." msgid "with GTK3 GUI."
msgstr "" msgstr ""
#: ../version.c:4173 #: ../version.c:4175
msgid "with GTK2-GNOME GUI." msgid "with GTK2-GNOME GUI."
msgstr "" msgstr ""
#: ../version.c:4175 #: ../version.c:4177
msgid "with GTK2 GUI." msgid "with GTK2 GUI."
msgstr "" msgstr ""
#: ../version.c:4178 #: ../version.c:4180
msgid "with X11-Motif GUI." msgid "with X11-Motif GUI."
msgstr "" msgstr ""
#: ../version.c:4180 #: ../version.c:4182
msgid "with Haiku GUI." msgid "with Haiku GUI."
msgstr "" msgstr ""
#: ../version.c:4182 #: ../version.c:4184
msgid "with Photon GUI." msgid "with Photon GUI."
msgstr "" msgstr ""
#: ../version.c:4184 #: ../version.c:4186
msgid "with GUI." msgid "with GUI."
msgstr "" msgstr ""
#: ../version.c:4186 #: ../version.c:4188
msgid " Features included (+) or not (-):\n" msgid " Features included (+) or not (-):\n"
msgstr "" msgstr ""
#: ../version.c:4193 #: ../version.c:4195
msgid " system vimrc file: \"" msgid " system vimrc file: \""
msgstr "" msgstr ""
#: ../version.c:4198 #: ../version.c:4200
msgid " user vimrc file: \"" msgid " user vimrc file: \""
msgstr "" msgstr ""
#: ../version.c:4203 #: ../version.c:4205
msgid " 2nd user vimrc file: \"" msgid " 2nd user vimrc file: \""
msgstr "" msgstr ""
#: ../version.c:4208 ../version.c:4215 ../version.c:4219 #: ../version.c:4210 ../version.c:4217 ../version.c:4221
msgid " 3rd user vimrc file: \"" msgid " 3rd user vimrc file: \""
msgstr "" msgstr ""
#: ../version.c:4211 #: ../version.c:4213
msgid " 4th user vimrc file: \"" msgid " 4th user vimrc file: \""
msgstr "" msgstr ""
#: ../version.c:4224 #: ../version.c:4226
msgid " user exrc file: \"" msgid " user exrc file: \""
msgstr "" msgstr ""
#: ../version.c:4229 #: ../version.c:4231
msgid " 2nd user exrc file: \"" msgid " 2nd user exrc file: \""
msgstr "" msgstr ""
#: ../version.c:4235 #: ../version.c:4237
msgid " system gvimrc file: \"" msgid " system gvimrc file: \""
msgstr "" msgstr ""
#: ../version.c:4239 #: ../version.c:4241
msgid " user gvimrc file: \"" msgid " user gvimrc file: \""
msgstr "" msgstr ""
#: ../version.c:4243 #: ../version.c:4245
msgid "2nd user gvimrc file: \"" msgid "2nd user gvimrc file: \""
msgstr "" msgstr ""
#: ../version.c:4248 #: ../version.c:4250
msgid "3rd user gvimrc file: \"" msgid "3rd user gvimrc file: \""
msgstr "" msgstr ""
#: ../version.c:4253 #: ../version.c:4255
msgid " defaults file: \"" msgid " defaults file: \""
msgstr "" msgstr ""
#: ../version.c:4258 #: ../version.c:4260
msgid " system menu file: \"" msgid " system menu file: \""
msgstr "" msgstr ""
#: ../version.c:4266 #: ../version.c:4268
msgid " fall-back for $VIM: \"" msgid " fall-back for $VIM: \""
msgstr "" msgstr ""
#: ../version.c:4272 #: ../version.c:4274
msgid " f-b for $VIMRUNTIME: \"" msgid " f-b for $VIMRUNTIME: \""
msgstr "" msgstr ""
#: ../version.c:4276 #: ../version.c:4278
msgid "Compilation: " msgid "Compilation: "
msgstr "" msgstr ""
#: ../version.c:4282 #: ../version.c:4284
msgid "Compiler: " msgid "Compiler: "
msgstr "" msgstr ""
#: ../version.c:4287 #: ../version.c:4289
msgid "Linking: " msgid "Linking: "
msgstr "" msgstr ""
#: ../version.c:4292 #: ../version.c:4294
msgid " DEBUG BUILD" msgid " DEBUG BUILD"
msgstr "" msgstr ""
#: ../version.c:4328 #: ../version.c:4330
msgid "VIM - Vi IMproved" msgid "VIM - Vi IMproved"
msgstr "" msgstr ""
#: ../version.c:4330 #: ../version.c:4332
msgid "version " msgid "version "
msgstr "" msgstr ""
#: ../version.c:4331 #: ../version.c:4333
msgid "by Bram Moolenaar et al." msgid "by Bram Moolenaar et al."
msgstr "" msgstr ""
#: ../version.c:4335 #: ../version.c:4337
msgid "Vim is open source and freely distributable" msgid "Vim is open source and freely distributable"
msgstr "" msgstr ""
#: ../version.c:4337 #: ../version.c:4339
msgid "Help poor children in Uganda!" msgid "Help poor children in Uganda!"
msgstr "" msgstr ""
#: ../version.c:4338 #: ../version.c:4340
msgid "type :help iccf<Enter> for information " msgid "type :help iccf<Enter> for information "
msgstr "" msgstr ""
#: ../version.c:4340 #: ../version.c:4342
msgid "type :q<Enter> to exit " msgid "type :q<Enter> to exit "
msgstr "" msgstr ""
#: ../version.c:4341 #: ../version.c:4343
msgid "type :help<Enter> or <F1> for on-line help" msgid "type :help<Enter> or <F1> for on-line help"
msgstr "" msgstr ""
#: ../version.c:4342 #: ../version.c:4344
msgid "type :help version9<Enter> for version info" msgid "type :help version9<Enter> for version info"
msgstr "" msgstr ""
#: ../version.c:4345 #: ../version.c:4347
msgid "Running in Vi compatible mode" msgid "Running in Vi compatible mode"
msgstr "" msgstr ""
#: ../version.c:4346 #: ../version.c:4348
msgid "type :set nocp<Enter> for Vim defaults" msgid "type :set nocp<Enter> for Vim defaults"
msgstr "" msgstr ""
#: ../version.c:4347 #: ../version.c:4349
msgid "type :help cp-default<Enter> for info on this" msgid "type :help cp-default<Enter> for info on this"
msgstr "" msgstr ""
#: ../version.c:4362 #: ../version.c:4364
msgid "menu Help->Orphans for information " msgid "menu Help->Orphans for information "
msgstr "" msgstr ""
#: ../version.c:4364 #: ../version.c:4366
msgid "Running modeless, typed text is inserted" msgid "Running modeless, typed text is inserted"
msgstr "" msgstr ""
#: ../version.c:4365 #: ../version.c:4367
msgid "menu Edit->Global Settings->Toggle Insert Mode " msgid "menu Edit->Global Settings->Toggle Insert Mode "
msgstr "" msgstr ""
#: ../version.c:4366 #: ../version.c:4368
msgid " for two modes " msgid " for two modes "
msgstr "" msgstr ""
#: ../version.c:4370 #: ../version.c:4372
msgid "menu Edit->Global Settings->Toggle Vi Compatible" msgid "menu Edit->Global Settings->Toggle Vi Compatible"
msgstr "" msgstr ""
#: ../version.c:4371 #: ../version.c:4373
msgid " for Vim defaults " msgid " for Vim defaults "
msgstr "" msgstr ""
#: ../version.c:4412 #: ../version.c:4414
msgid "Sponsor Vim development!" msgid "Sponsor Vim development!"
msgstr "" msgstr ""
#: ../version.c:4413 #: ../version.c:4415
msgid "Become a registered Vim user!" msgid "Become a registered Vim user!"
msgstr "" msgstr ""
#: ../version.c:4416 #: ../version.c:4418
msgid "type :help sponsor<Enter> for information " msgid "type :help sponsor<Enter> for information "
msgstr "" msgstr ""
#: ../version.c:4417 #: ../version.c:4419
msgid "type :help register<Enter> for information " msgid "type :help register<Enter> for information "
msgstr "" msgstr ""
#: ../version.c:4419 #: ../version.c:4421
msgid "menu Help->Sponsor/Register for information " msgid "menu Help->Sponsor/Register for information "
msgstr "" msgstr ""

View File

@ -1159,12 +1159,14 @@ pum_set_selected(int n, int repeat UNUSED)
* 'completeopt' contains "preview" or "popup" or "popuphidden". * 'completeopt' contains "preview" or "popup" or "popuphidden".
* Skip this when tried twice already. * Skip this when tried twice already.
* Skip this also when there is not much room. * Skip this also when there is not much room.
* Skip this for command-window when 'completeopt' contains "preview".
* NOTE: Be very careful not to sync undo! * NOTE: Be very careful not to sync undo!
*/ */
if (pum_array[pum_selected].pum_info != NULL if (pum_array[pum_selected].pum_info != NULL
&& Rows > 10 && Rows > 10
&& repeat <= 1 && repeat <= 1
&& (cur_cot_flags & COT_ANY_PREVIEW)) && (cur_cot_flags & COT_ANY_PREVIEW)
&& !((cur_cot_flags & COT_PREVIEW) && cmdwin_type != 0))
{ {
win_T *curwin_save = curwin; win_T *curwin_save = curwin;
tabpage_T *curtab_save = curtab; tabpage_T *curtab_save = curtab;

View File

@ -2278,5 +2278,18 @@ func Test_pum_position_when_wrap()
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc endfunc
" Test that Vim does not crash when completion inside cmdwin opens a 'info'
" preview window.
func Test_popup_complete_cmdwin_preview()
func! CompleteWithPreview(findstart, base)
if a:findstart
return getline('.')->strpart(0, col('.') - 1)
endif
return [#{word: 'echo', info: 'bar'}, #{word: 'echomsg', info: 'baz'}]
endfunc
set omnifunc=CompleteWithPreview
call feedkeys("q:if\<C-X>\<C-O>\<C-N>\<ESC>\<CR>", 'tx!')
set omnifunc&
endfunc
" vim: shiftwidth=2 sts=2 expandtab " vim: shiftwidth=2 sts=2 expandtab

View File

@ -719,6 +719,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 */
/**/
1554,
/**/ /**/
1553, 1553,
/**/ /**/