patch 9.1.1554: crash when omni-completion opens command-line window
Commit:
https://github.com/vim/vim/commit/e4fdb1e4e7583d824d4d86efa9b507c218d0af6a
Author: Girish Palya <[email protected]>
Date: Wed Jul 16 18:54:54 2025 +0200
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 <[email protected]>
Signed-off-by: Girish Palya <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
diff --git a/src/po/vim.pot b/src/po/vim.pot
index 43e194e92..dcead5ccf 100644
--- a/src/po/vim.pot
+++ b/src/po/vim.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION
"
"Report-Msgid-Bugs-To:
"
-"POT-Creation-Date: 2025-07-16 18:34+0200
"
+"POT-Creation-Date: 2025-07-16 18:54+0200
"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE
"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>
"
"Language-Team: LANGUAGE <[email protected]>
"
@@ -4257,327 +4257,327 @@ msgstr ""
msgid "%s (%s, compiled %s)"
msgstr ""
-#: ../version.c:4040
+#: ../version.c:4042
msgid ""
"
"
"MS-Windows ARM64 GUI/console version"
msgstr ""
-#: ../version.c:4042
+#: ../version.c:4044
msgid ""
"
"
"MS-Windows 64-bit GUI/console version"
msgstr ""
-#: ../version.c:4045
+#: ../version.c:4047
msgid ""
"
"
"MS-Windows 32-bit GUI/console version"
msgstr ""
-#: ../version.c:4050
+#: ../version.c:4052
msgid ""
"
"
"MS-Windows ARM64 GUI version"
msgstr ""
-#: ../version.c:4052
+#: ../version.c:4054
msgid ""
"
"
"MS-Windows 64-bit GUI version"
msgstr ""
-#: ../version.c:4055
+#: ../version.c:4057
msgid ""
"
"
"MS-Windows 32-bit GUI version"
msgstr ""
-#: ../version.c:4059
+#: ../version.c:4061
msgid " with OLE support"
msgstr ""
-#: ../version.c:4064
+#: ../version.c:4066
msgid ""
"
"
"MS-Windows ARM64 console version"
msgstr ""
-#: ../version.c:4066
+#: ../version.c:4068
msgid ""
"
"
"MS-Windows 64-bit console version"
msgstr ""
-#: ../version.c:4069
+#: ../version.c:4071
msgid ""
"
"
"MS-Windows 32-bit console version"
msgstr ""
-#: ../version.c:4075
+#: ../version.c:4077
msgid ""
"
"
"macOS version"
msgstr ""
-#: ../version.c:4077
+#: ../version.c:4079
msgid ""
"
"
"macOS version w/o darwin feat."
msgstr ""
-#: ../version.c:4087
+#: ../version.c:4089
msgid ""
"
"
"OpenVMS version"
msgstr ""
-#: ../version.c:4102
+#: ../version.c:4104
msgid ""
"
"
"Included patches: "
msgstr ""
-#: ../version.c:4127
+#: ../version.c:4129
msgid ""
"
"
"Extra patches: "
msgstr ""
-#: ../version.c:4139 ../version.c:4450
+#: ../version.c:4141 ../version.c:4452
msgid "Modified by "
msgstr ""
-#: ../version.c:4146
+#: ../version.c:4148
msgid ""
"
"
"Compiled "
msgstr ""
-#: ../version.c:4149
+#: ../version.c:4151
msgid "by "
msgstr ""
-#: ../version.c:4161
+#: ../version.c:4163
msgid ""
"
"
"Huge version "
msgstr ""
-#: ../version.c:4163
+#: ../version.c:4165
msgid ""
"
"
"Normal version "
msgstr ""
-#: ../version.c:4165
+#: ../version.c:4167
msgid ""
"
"
"Tiny version "
msgstr ""
-#: ../version.c:4168
+#: ../version.c:4170
msgid "without GUI."
msgstr ""
-#: ../version.c:4171
+#: ../version.c:4173
msgid "with GTK3 GUI."
msgstr ""
-#: ../version.c:4173
+#: ../version.c:4175
msgid "with GTK2-GNOME GUI."
msgstr ""
-#: ../version.c:4175
+#: ../version.c:4177
msgid "with GTK2 GUI."
msgstr ""
-#: ../version.c:4178
+#: ../version.c:4180
msgid "with X11-Motif GUI."
msgstr ""
-#: ../version.c:4180
+#: ../version.c:4182
msgid "with Haiku GUI."
msgstr ""
-#: ../version.c:4182
+#: ../version.c:4184
msgid "with Photon GUI."
msgstr ""
-#: ../version.c:4184
+#: ../version.c:4186
msgid "with GUI."
msgstr ""
-#: ../version.c:4186
+#: ../version.c:4188
msgid " Features included (+) or not (-):
"
msgstr ""
-#: ../version.c:4193
+#: ../version.c:4195
msgid " system vimrc file: \""
msgstr ""
-#: ../version.c:4198
+#: ../version.c:4200
msgid " user vimrc file: \""
msgstr ""
-#: ../version.c:4203
+#: ../version.c:4205
msgid " 2nd user vimrc file: \""
msgstr ""
-#: ../version.c:4208 ../version.c:4215 ../version.c:4219
+#: ../version.c:4210 ../version.c:4217 ../version.c:4221
msgid " 3rd user vimrc file: \""
msgstr ""
-#: ../version.c:4211
+#: ../version.c:4213
msgid " 4th user vimrc file: \""
msgstr ""
-#: ../version.c:4224
+#: ../version.c:4226
msgid " user exrc file: \""
msgstr ""
-#: ../version.c:4229
+#: ../version.c:4231
msgid " 2nd user exrc file: \""
msgstr ""
-#: ../version.c:4235
+#: ../version.c:4237
msgid " system gvimrc file: \""
msgstr ""
-#: ../version.c:4239
+#: ../version.c:4241
msgid " user gvimrc file: \""
msgstr ""
-#: ../version.c:4243
+#: ../version.c:4245
msgid "2nd user gvimrc file: \""
msgstr ""
-#: ../version.c:4248
+#: ../version.c:4250
msgid "3rd user gvimrc file: \""
msgstr ""
-#: ../version.c:4253
+#: ../version.c:4255
msgid " defaults file: \""
msgstr ""
-#: ../version.c:4258
+#: ../version.c:4260
msgid " system menu file: \""
msgstr ""
-#: ../version.c:4266
+#: ../version.c:4268
msgid " fall-back for $VIM: \""
msgstr ""
-#: ../version.c:4272
+#: ../version.c:4274
msgid " f-b for $VIMRUNTIME: \""
msgstr ""
-#: ../version.c:4276
+#: ../version.c:4278
msgid "Compilation: "
msgstr ""
-#: ../version.c:4282
+#: ../version.c:4284
msgid "Compiler: "
msgstr ""
-#: ../version.c:4287
+#: ../version.c:4289
msgid "Linking: "
msgstr ""
-#: ../version.c:4292
+#: ../version.c:4294
msgid " DEBUG BUILD"
msgstr ""
-#: ../version.c:4328
+#: ../version.c:4330
msgid "VIM - Vi IMproved"
msgstr ""
-#: ../version.c:4330
+#: ../version.c:4332
msgid "version "
msgstr ""
-#: ../version.c:4331
+#: ../version.c:4333
msgid "by Bram Moolenaar et al."
msgstr ""
-#: ../version.c:4335
+#: ../version.c:4337
msgid "Vim is open source and freely distributable"
msgstr ""
-#: ../version.c:4337
+#: ../version.c:4339
msgid "Help poor children in Uganda!"
msgstr ""
-#: ../version.c:4338
+#: ../version.c:4340
msgid "type :help iccf<Enter> for information "
msgstr ""
-#: ../version.c:4340
+#: ../version.c:4342
msgid "type :q<Enter> to exit "
msgstr ""
-#: ../version.c:4341
+#: ../version.c:4343
msgid "type :help<Enter> or <F1> for on-line help"
msgstr ""
-#: ../version.c:4342
+#: ../version.c:4344
msgid "type :help version9<Enter> for version info"
msgstr ""
-#: ../version.c:4345
+#: ../version.c:4347
msgid "Running in Vi compatible mode"
msgstr ""
-#: ../version.c:4346
+#: ../version.c:4348
msgid "type :set nocp<Enter> for Vim defaults"
msgstr ""
-#: ../version.c:4347
+#: ../version.c:4349
msgid "type :help cp-default<Enter> for info on this"
msgstr ""
-#: ../version.c:4362
+#: ../version.c:4364
msgid "menu Help->Orphans for information "
msgstr ""
-#: ../version.c:4364
+#: ../version.c:4366
msgid "Running modeless, typed text is inserted"
msgstr ""
-#: ../version.c:4365
+#: ../version.c:4367
msgid "menu Edit->Global Settings->Toggle Insert Mode "
msgstr ""
-#: ../version.c:4366
+#: ../version.c:4368
msgid " for two modes "
msgstr ""
-#: ../version.c:4370
+#: ../version.c:4372
msgid "menu Edit->Global Settings->Toggle Vi Compatible"
msgstr ""
-#: ../version.c:4371
+#: ../version.c:4373
msgid " for Vim defaults "
msgstr ""
-#: ../version.c:4412
+#: ../version.c:4414
msgid "Sponsor Vim development!"
msgstr ""
-#: ../version.c:4413
+#: ../version.c:4415
msgid "Become a registered Vim user!"
msgstr ""
-#: ../version.c:4416
+#: ../version.c:4418
msgid "type :help sponsor<Enter> for information "
msgstr ""
-#: ../version.c:4417
+#: ../version.c:4419
msgid "type :help register<Enter> for information "
msgstr ""
-#: ../version.c:4419
+#: ../version.c:4421
msgid "menu Help->Sponsor/Register for information "
msgstr ""
diff --git a/src/popupmenu.c b/src/popupmenu.c
index eecddc5be..fa6d9a518 100644
--- a/src/popupmenu.c
+++ b/src/popupmenu.c
@@ -1159,12 +1159,14 @@ pum_set_selected(int n, int repeat UNUSED)
* 'completeopt' contains "preview" or "popup" or "popuphidden".
* Skip this when tried twice already.
* 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!
*/
if (pum_array[pum_selected].pum_info != NULL
&& Rows > 10
&& 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;
tabpage_T *curtab_save = curtab;
diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim
index 2ae01656f..b8c318585 100644
--- a/src/testdir/test_popup.vim
+++ b/src/testdir/test_popup.vim
@@ -2278,5 +2278,18 @@ func Test_pum_position_when_wrap()
call StopVimInTerminal(buf)
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
diff --git a/src/version.c b/src/version.c
index 1ffb15426..3e4151b4d 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 */
+/**/
+ 1554,
/**/
1553,
/**/
--
--
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 visit
https://groups.google.com/d/msgid/vim_dev/E1uc5UB-009VbD-JL%40256bit.org.