Commit Graph

2168 Commits

Author SHA1 Message Date
zeertzjq
259f1173e4 vim-patch:9.2.0698: [security]: Out-of-bounds write with soundfold() (#40362)
Problem:  [security]: Out-of-bounds write with soundfold()
          (cipher-creator)
Solution: Add an abort condition to the for loop to validate the buffer
          size.

Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-q8mh-6qm3-25g4

Supported by AI

497f931f85

This is N/A as it only changes the !has_mbyte code path.

Co-authored-by: Christian Brabandt <cb@256bit.org>
2026-06-22 02:34:22 +00:00
zeertzjq
257701b17b vim-patch:9.2.0689: the "%" command is slow on a long line with many slashes (#40361)
Problem:  The "%" command can be very slow on a long line that contains
          many slashes, for example a line of base64 data.
Solution: When looking for a line comment, scan the line only once while
          skipping over strings, instead of rescanning from the start for
          every slash.  Move check_linecomment() to cindent.c so it can
          reuse the file-local skip_string().

related: vim/vim#20491
fixes:   vim/vim#20557
closes:  vim/vim#20575

9f9af034ad

Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 02:28:15 +00:00
zeertzjq
7d0adc08f7 vim-patch:9.2.0699: [security]: possible code execution with python complete (#40363)
Problem:  [security]: possible code execution with python complete
          (morningbread)
Solution: Use repr() to quote the doc strings correctly

Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-ppj8-wqjf-6fp3

Supported by AI

cce141c427

Co-authored-by: Christian Brabandt <cb@256bit.org>
2026-06-22 02:26:37 +00:00
zeertzjq
9c900c1255 vim-patch:9.2.0684: :reg # does not display the value of the '#' register (#40352)
Problem:  ':registers #' does not display the value of the '#' register.
Solution: Filter the '#' :registers output on a '#' arg instead of '%'
          (Doug Kearns).

closes: vim/vim#20589

0cafe56b74

Co-authored-by: Doug Kearns <dougkearns@gmail.com>
2026-06-21 22:18:08 +08:00
zeertzjq
dc0b54276d vim-patch:9.2.0683: filetype completion mishandles finished sub options (#40351)
Problem:  ":filetype plugin<Tab>" gives "pluginindent" because a
          sub option before the cursor is treated as already given.
Solution: only skip plugin and indent when followed by white space.
          (glepnir)

closes: vim/vim#20594

fe65f23aca

Co-authored-by: glepnir <glephunter@gmail.com>
2026-06-21 14:16:03 +00:00
zeertzjq
9607e53cea vim-patch:9.2.0682: Wrong dot-repeat when calling complete() while filtering completion (#40350)
Problem:  Wrong dot-repeat when calling complete() while filtering
          Ctrl-N completion.
Solution: Also check compl_started for whether completion is active.
          (zeertzjq)

related: neovim/neovim#40346
closes:  vim/vim#20595

37a7e4944f
2026-06-21 14:09:43 +00:00
Jan Edmund Lazo
d40c07511a vim-patch:9.0.1328: error when using "none" for GUI color is confusing (#40347)
Problem:    Error when using "none" for GUI color is confusing.
Solution:   Mention that the name should perhaps be "NONE". (closes vim/vim#1400)

5b9f57262f

Co-authored-by: Bram Moolenaar <Bram@vim.org>
2026-06-21 02:42:07 +00:00
zeertzjq
1724096ae0 vim-patch:9.2.0680: keytrans() doesn't replace '|' and '\' (#40345)
Problem:  keytrans() doesn't replace '|' and '\' (user202729)
Solution: Replace '|' and '\' with "<Bar>" and "<Bslash>" respectively.
          (zeertzjq)

fixes:  vim/vim#20585
closes: vim/vim#20586

47fd183c4e
2026-06-21 08:24:52 +08:00
zeertzjq
dc1393d9c1 vim-patch:9.2.0675: tests: Test_cd_from_non_existing_dir() fails on Solaris
Problem:  tests: Test_cd_from_non_existing_dir() fails on Solaris
Solution: Skip the test on Solaris (Vladimír Marek).

Test_cd_from_non_existing_dir() depends on deleting the current working
directory.  Solaris does not allow that, so skip the test there.

closes: vim/vim#20563

b464c36bf9

Co-authored-by: Vladimír Marek <vlmarek13@gmail.com>
2026-06-19 09:44:42 +08:00
zeertzjq
147872452e vim-patch:9.2.0673: tests: Test_recover_corrupted_swap_file() cannot handle symlinks
Problem:  tests: Test_recover_corrupted_swap_file() cannot handle
          symlinks
Solution: Use writefile(readblob()) instead (Vladimír Marek)

Test_recover_corrupted_swap_file1() copies prebuilt corrupt swap samples
before recovering them.  In an out-of-source-tree build those sample
files may be symlinks into the source tree.  filecopy() preserves
symlinks, so the copied target may remain a symlink.  Recovery opens
swap files with O_NOFOLLOW, so that copied symlink cannot be opened.
Read the sample as a blob and write it back so the recovery target is a
real swap file.

closes: vim/vim#20561

88cbd00312

Co-authored-by: Vladimír Marek <vlmarek13@gmail.com>
2026-06-19 09:43:55 +08:00
zeertzjq
025a3e2baf vim-patch:9.2.0479: [security]: runtime(tar): command injection in tar plugin
Problem:  [security]: runtime(tar): command injection in tar plugin
          (Christopher Lusk)
Solution: Use the correct shellescape(args, 1) form for a :! command

Github Advisory:
https://github.com/vim/vim/security/advisories/GHSA-2fpv-9ff7-xg5w

3fb5e58fbc

Co-authored-by: Christian Brabandt <cb@256bit.org>
2026-06-19 09:43:55 +08:00
zeertzjq
f5ad6763b6 vim-patch:9.2.0677: Cannot clear the alternate file register # (#40316)
Problem:  Cannot clear the alternate file register #
Solution: Allow to clear it (Christoffer Aasted)

closes: vim/vim#20537

9db6fe4b17

Co-authored-by: Christoffer Aasted <dezzadk@gmail.com>
2026-06-19 01:30:41 +00:00
zeertzjq
1cfbf104f5 vim-patch:9.2.0676: MS-Windows: cannot switch to a buffer with '%' in its name (#40315)
Problem:  On MS-Windows it is not possible to switch to a buffer by name
          with ":b" (including via command-line completion) when the
          buffer name contains '%'.
Solution: Do not escape '%' and '#' for the ":buffer" command on
          MS-Windows.  Since ":buffer" has no EX_XFILE these are not
          expanded, and escaping them as "\%"/"\#" makes buffer name
          matching fail when '%'/'#' is in 'isfname' (the backslash is
          treated as a path separator).

fixes:  vim/vim#20529
closes: vim/vim#20548

1a96e07bf6

Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 08:57:03 +08:00
Jan Edmund Lazo
2370fc1d91 vim-patch:9.2.0586: Crash with TextPut autocmd when pasting in terminal buffer (#40314)
Problem:  Crash with TextPut autocmd when pasting in normal mode in a
          terminal buffer.
Solution: Skip the TextPut autocmds when reg and insert are both NULL
          and regname is not '.' (Foxe Chen).

closes: vim/vim#20407

2e7833bde9

Co-authored-by: Foxe Chen <chen.foxe@gmail.com>
2026-06-19 08:41:56 +08:00
zeertzjq
c4ce10930c vim-patch:9.2.0663: [security]: runtime(netrw): code injection in local file deletion
Problem:  [security]: s:NetrwLocalRmFile() escapes only the backslash in
          the file name before passing it to :execute, so a name
          containing "|" injects arbitrary Ex commands when the file is
          deleted (cipher-creator)
Solution: Use fnameescape() to correctly escape the file name
          (Yasuhiro Matsumoto).

Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-vhh8-v6wx-hjjh

Supported by AI

55bc757a5d

Co-authored-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
2026-06-17 15:22:04 +08:00
zeertzjq
52d7bbd1a0 vim-patch:9.2.0662: [security] Stack out-of-bounds write in dump_prefixes()
Problem:  [security]: a crafted spell file with a self-referential
          BY_INDEX node in the prefix tree can drive dump_prefixes()
          past the end of its MAXWLEN-sized depth arrays on :spelldump
          (cipher-creator)
Solution: only descend while depth < MAXWLEN - 1, as the sibling trie
          walkers already do (Yasuhiro Matsumoto)

Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-qm9w-fmpj-879h

Supported by AI

8325b193bb

Co-authored-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
2026-06-17 15:22:04 +08:00
zeertzjq
62cb36927d vim-patch:9.2.0651: completion: 'smartcase' doesn't work with 'longest'
Problem:  With 'longest', 'smartcase' is ignored when filtering matches:
          "inp" offers only "InputEvent", and an uppercase pattern gives
          different results for CTRL-N and CTRL-P.
Solution: 'longest' rewrites the leader with the common prefix, picking
          up uppercase the user never typed.  Judge case from the typed
          text instead, and match the auto-inserted part of the leader
          case-insensitively so CTRL-N and CTRL-P give the same result.
          (glepnir)

related: neovim/neovim#40259
closes:  vim/vim#20533

50fe45aca7

Co-authored-by: glepnir <glephunter@gmail.com>
2026-06-17 08:56:24 +08:00
zeertzjq
635939da3e vim-patch:9.2.0653: [security]: out-of-bounds write in tree_count_words() (#40279)
Problem:  [security]: a crafted spell file can drive tree_count_words()
          past the end of its MAXWLEN-sized depth arrays; the descent
          loop has no depth bound.
Solution: only descend while depth < MAXWLEN - 1, as the sibling trie
          walkers already do; apply the same guard to sug_filltree().

Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-wgh4-64f7-q3jq

Supported by AI.

a80874d9b8

Co-authored-by: Christian Brabandt <cb@256bit.org>
2026-06-16 09:57:45 +08:00
zeertzjq
17d4f4c5d8 Merge pull request #40255 from janlazo/vim-8.2.1821
vim-patch:8.2.1821,9.0.{927,2123},9.1.1233
2026-06-16 09:53:21 +08:00
zeertzjq
a69f2db773 vim-patch:9.2.0649: filetype: tf files sometimes incorrectly recognized (#40258)
Problem:  filetype: tf files sometimes incorrectly recognized
          (Christian Robinson)
Solution: Add support for g;filetype_tf variable to override detection,
          re-write the filetype detection loop

closes: vim/vim#20510

Supported by AI

522a39a489

Co-authored-by: Christian Brabandt <cb@256bit.org>
2026-06-15 05:48:35 +00:00
zeertzjq
3aea851bfe vim-patch:9.2.0647: matchfuzzypos() false exact match for long equal-length candidates (#40257)
Problem:  When a candidate gets truncated to MATCH_MAX_LEN and ends up
          the same length as the needle, the n == m shortcut would
          return SCORE_MAX with positions 0..n-1, even if the strings
          actually differ.
Solution: Only use the shortcut if the truncated strings are truly equal.
          Otherwise, fall back to regular matching.

Example:
echo matchfuzzypos(['x' .. repeat('a',1024)], repeat('a',1024))

closes: vim/vim#20475

1437f47815

Co-authored-by: glepnir <glephunter@gmail.com>
2026-06-15 05:20:11 +00:00
Jan Edmund Lazo
056fdd97d6 vim-patch:9.0.2123: Problem with initializing the length of range() lists
Problem:  Problem with initializing the length of range() lists
Solution: Set length explicitly when it shouldn't contain any items

range() may cause a wrong calculation of list length, which may later
then cause a segfault in list_find().  This is usually not a problem,
because range_list_materialize() calculates the length, when it
materializes the list.

In addition, in list_find() when the length of the range was wrongly
initialized, it may seem to be valid, so the check for list index
out-of-bounds will not be true, because it is called before the list is
actually materialized. And so we may eventually try to access a null
pointer, causing a segfault.

So this patch does 3 things:

- In f_range(), when we know that the list should be empty, explicitly
  set the list->lv_len value to zero. This should happen, when
  start is larger than end (in case the stride is positive) or
  end is larger than start when the stride is negative.
  This should fix the underlying issue properly. However,

- as a safety measure, let's check that the requested index is not
  out of range one more time, after the list has been materialized
  and return NULL in case it suddenly is.

- add a few more tests to verify the behaviour.

fixes: vim/vim#13557
closes: vim/vim#13563

--------

Vim9 (non) materialize list is N/A.
Port only tests.

df63da98d8

Co-authored-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Tim Pope <tpope@github.com>
2026-06-14 23:30:30 -04:00
zeertzjq
63d89afc4c vim-patch:9.2.0642: statusline: buffer overflow with item groups (#40253)
Problem:  statusline: buffer overflow with item groups
Solution: Fix the issues (see below) (Sébastien Hoffmann)

Fix various buffer overflow bugs (examples assume MAXPATHL==4096):
- truncated item groups where minwid>maxwid:
    vim --clean +"set ls=2 stl=%<%{%repeat('x',4096-11)%}%50.5(12🙂345%)"
  leads to fillchars spilling over the end of the group/buffer while trying to
  compensate for truncating at a multicell character because minwid<=maxwid is assumed
- left-aligned item groups with multi-byte fillchar:
    vim --clean +"set ls=2 fillchars+=stl:∙ stl=%<%{%repeat('x',4096-3)%}%-2(X%)"
  wrongly leads to padding at the end of the statusline and `p-out==4097`
  because the bounds check assumes a 1-byte fillchar
- right-aligned item groups with 1-byte fillchar:
    vim --clean +"set ls=2 stl=%<%{%repeat('x',4096-4)%}%4(XY%)"
  leads to "YX" instead of "XY" at the end of the statusline
  because `memmove` is done before adjusting the offset
- right-aligned item groups with multi-byte fillchar:
    vim --clean +"set ls=2 fillchars+=stl:∙ stl=%5(X%)"
  leads to "∙∙∙∙<e2>", i.e. the fillchar is being written over the group contents
  and eventually being overwritten itself at the second byte with the final NUL,
  because the padding counter assumes a 1-byte fillchar; to crash vim,
    vim --clean +"set ls=2 fillchars+=stl:∙ stl=%<%{%repeat('x',4096-149)%}%50(X%)"

related: neovim/neovim#40219
closes:  vim/vim#20522

d249884340

Co-authored-by: Sébastien Hoffmann <contact@shoffmann.dev>
2026-06-15 10:40:25 +08:00
zeertzjq
2fe91d0225 vim-patch:9.2.0645: Composing chars no longer accepted in end-id abbr
Problem:  Composing chars are no longer accepted in end-id abbreviation
          (after 9.2.0629).
Solution: Unescape all chars using vim_unescape_csi() instead of using
          mb_unescape() on individual chars, so that mb_ptr2len() and
          MB_PTR_ADV() can still be used.

closes: vim/vim#20514

23a84d28a8
2026-06-15 08:15:26 +08:00
zeertzjq
0c63e41b5d vim-patch:9.2.0629: 0x80 and 0x9b byte not unescaped when check for valid abbr
Problem:  0x80 and 0x9b byte not unescaped when checking for valid abbr
          (Mao-Yining)
Solution: Use mb_unescape() (zeertzjq).

fixes:  vim/vim#20506
closes: vim/vim#20508

1958c991a8
2026-06-15 08:06:30 +08:00
glepnir
2e8c60cb38 vim-patch:9.2.0624: C-N/C-P cannot be mapped in complete() completion (#40232)
Problem:  Keys valid in CTRL-X mode are never mapped while insert
          completion is active, so <C-N> and <C-P> cannot be remapped
          for completion started by complete().
Solution: Do not disable mappings in CTRL_X_EVAL mode.  In this mode a
          mapping cannot interfere with selecting the completion
          method, which is what the no-mapping rule exists for.

related: vim/vim#6440
related: vim/vim#16880
closes:  vim/vim#20489

076585e6ad

Co-authored-by: Thomas M Kehrenberg <tmke8@posteo.net>
2026-06-14 05:15:07 +00:00
zeertzjq
3e300b0deb vim-patch:9.2.0635: checking the syntax contains/cluster list is slow (#40230)
Problem:  Deciding whether a group is in a "contains"/cluster list scans
          the list and expands clusters on every check, which is slow for
          syntaxes with large lists (e.g. plugins such as netrw).
Solution: Resolve each list once into a sorted, cluster-expanded set of
          group IDs and use a binary search; cache it per syntax block and
          drop the cache when syntax definitions change (Hirohito Higashi).

closes: vim/vim#20490

48fbae4378

Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-14 03:40:59 +00:00
zeertzjq
e997599894 vim-patch:9.2.0640: the "%" command jumps to parens and braces inside comments (#40229)
Problem:  The "%" command jumps to parens and braces inside comments,
          unlike the "=" operator (cindent), which ignores them.
Solution: When 'comments' defines C-style comments and "%" is not in
          'cpoptions', skip matching parens inside such comments, except
          when the cursor is inside a comment so a match there can still
          be found.

fixes:   vim/vim#20329
related: vim/vim#20111
closes:  vim/vim#20491

b8a109dcfb

Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 10:52:50 +08:00
glepnir
ff0352fd4f vim-patch:9.2.0639: gq with 'formatprg' fails on an empty buffer (#40226)
Problem:  gq (and other filters) on an empty buffer fail with
          "E20: Mark not set": when the filter produces no output,
          do_filter() still subtracts the line count from '[ and '],
          pushing '] to line 0.
Solution: when the filter produces no output, put '[ and '] on a valid
          line instead of subtracting past line 1 (glepnir).

related: neovim/neovim#30593
closes:  vim/vim#19061

aefbca2977
2026-06-14 08:45:16 +08:00
zeertzjq
00289fa20a vim-patch:9.2.0621: 'autoindent' not stripped with virtualedit=onemore (#40203)
Problem:  'autoindent' not stripped with virtualedit=onemore (after
          9.2.0510).
Solution: Restore the decrement of cursor column when it's on NUL.

fixes:  neovim/neovim#40183
closes: vim/vim#20476

4b13277edd
2026-06-12 18:53:35 +08:00
zeertzjq
de10d10d3f vim-patch:9.1.1865: tests: do not notice lines containing only a tab (#40182)
Problem:  tests: test_codestyle does not notice lines containing only a
          tab
Solution: Fix the whitespace issue in eval.txt, update test_codestyle to
          notice such issues (Hirohito Higashi)

closes: vim/vim#18595

5b5290ec02

Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
2026-06-11 18:47:57 +08:00
Jan Edmund Lazo
273cad8f8d vim-patch:9.1.1996: tests: test_cmdline.vim leaves swapfiles behind
Problem:  tests: test_cmdline.vim leaves swapfiles behind
Solution: Close open buffers using :bw! instead of :close!

bf1b41e387

Co-authored-by: Christian Brabandt <cb@256bit.org>
2026-06-10 22:39:35 -04:00
Jan Edmund Lazo
0837ccbf24 vim-patch:9.1.1956: tests: test_sort.vim leaves swapfiles behind
Problem:  tests: test_sort.vim leaves swapfiles behind
Solution: Close open buffers using :bw! instead of :close!

f8c550fea0

Co-authored-by: Christian Brabandt <cb@256bit.org>
2026-06-10 22:32:41 -04:00
Jan Edmund Lazo
29ec44dfc1 vim-patch:9.1.0944: tests: test_registers fails when not run under X11
Problem:  tests: test_registers fails when not run under X11
Solution: filter out warning message

b2a8df35e8

Co-authored-by: Christian Brabandt <cb@256bit.org>
2026-06-10 22:31:31 -04:00
zeertzjq
2b8e4f6988 vim-patch:9.2.0620: runtime(netrw): fix 2match pattern rebuild (#40179)
Problem:  unmarking a regular file when there are directories in the markings
          list also removes the 2match highlight from those directories.
Solution: correctly rebuild the match pattern from the remaining markings,
          using the right regex trailer for each entry in the list.

closes: vim/vim#20461

affd4b5964

Co-authored-by: J. Paulo Seibt <jpseibt@gmail.com>
2026-06-11 02:16:15 +00:00
tao
b49492f13c fix(option): set 'shell…' options based on detected shell #40031
Problem:
* 'shellcmdflag' states that its default value is set according to the
  value of 'shell', but this behavior is not yet implemented on Windows.
  The same applies to 'shellpipe', 'shellredir', and 'shellxquote'.
* On Windows, Git is often installed in paths containing spaces, and we
  still do not correctly resolve the sh executable name as described in
  'shell'.
* On Windows, the default value of 'shellslash' is always `false`,
  which causes Unix-like shells to interpret `\` in paths returned by
  some functions as escape charaters.

Solution:
Use a simple rule table to detect common shells (e.g. `cmd`,
`powershell`, shells whose names contain `csh` or `sh`) and apply
best-effort defaults, while leaving more complex scenarios to user
configuration.
2026-06-10 17:28:17 -04:00
zeertzjq
cc056d78fb vim-patch:9.1.0581: Various lines are indented inconsistently (#40161)
Problem:  style: Various lines are indented inconsistently
Solution: Retab these lines and correct some comments.
          (zeertzjq)

closes: vim/vim#15259

d9be94cf03
2026-06-10 04:56:22 +00:00
Jan Edmund Lazo
b402a1221f vim-patch:9.1.0342: tests: test_taglist fails when 'helplang' contains non-english
Problem:  tests: test_taglist fails when 'helplang' contains non-english
Solution: Allow 1 or 2 tagfiles for now (Julio B)

related: vim/vim#14312
closes: vim/vim#14566

ae7e61c928

Co-authored-by: Julio B <julio.bacel@gmail.com>
2026-06-09 23:30:27 -04:00
Jan Edmund Lazo
1c8b988bf7 vim-patch:9.1.0095: tests: test_restricted() fails
Problem:  tests: test_restricted() fails
          (after: v9.1.0091)
Solution: Add a space before the pipecmd and the actual Vim command to
          run

52eb0b8677

Co-authored-by: Christian Brabandt <cb@256bit.org>
2026-06-09 23:17:46 -04:00
Jan Edmund Lazo
4465bb8bc8 vim-patch:9.0.2082: test_channel may fail because of IPv6 config issue
Problem:  test_channel may fail because of IPv6 config issues
Solution: Catch and skip the test, if getaddrinfo() fails with
          'Address family not supported'

Mark tests as skipped when ch_open encounters E901

On some of the Debian build systems, the IPv6 channel tests fail because
`ch_open('[::1]:<port>', ...)` raises the error "E901: getaddrinfo() in
channel_open(): Address family for hostname not supported".

This appears to happen because getaddrinfo() can't perform the reverse
lookup for the ::1, which is a config issue on that system.  Therefore,
instead of reporting a test failure, mark the test as skipped due to the
bad network config

closes: vim/vim#13473

43cb8e1c3b

Co-authored-by: James McCoy <jamessan@jamessan.com>
2026-06-09 22:34:24 -04:00
zeertzjq
51d59b2244 vim-patch:9.2.0605: tests: Test_screenpos() is flaky in GUI (#40156)
Problem:  Test_screenpos() fails intermittently in the GUI testgui CI
          job with "Expected {'row': 22} but got {'row': 23}".  In the
          GUI, the window height reported by getwininfo() before the
          final redraw can be stale, so the cached wininfo.height does
          not match the actual window height when the assertion runs.
Solution: Use winheight(winid) at assertion time so the height reflects
          the window state after the redraw.

closes: vim/vim#20457

781a91ac54

Co-authored-by: thinca <thinca@gmail.com>
2026-06-10 08:47:13 +08:00
zeertzjq
d4e6f92f52 vim-patch:9.2.0610: cindent: closing brace in a comment affects the next line's indent (#40155)
Problem:  A '}' inside a // line comment changes the indentation of the
          following line inside an enum or struct (rendcrx).
Solution: Stop scanning the line once a line comment is reached, so a brace
          inside the comment is no longer mistaken for an unmatched brace.

fixes:  vim/vim#20455
closes: vim/vim#20458

9dd86dff9b

Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 07:37:08 +08:00
zeertzjq
4ab670399b vim-patch:9.2.0596: cmdline completion popup cannot be scrolled with the mouse (#40142)
Problem:  In command-line completion with a popup menu ('wildoptions'
          contains "pum"), the info popup shown next to the menu could
          not be scrolled, unlike the Insert mode completion info popup
          which scrolls with the mouse wheel.
Solution: When the mouse pointer is on top of the info popup, scroll it
          with the mouse wheel in command-line mode as well, without
          closing the completion popup menu.

closes: vim/vim#20146
closes: vim/vim#20418

96dbab257a

Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 20:53:10 +08:00
glepnir
3f37b230af vim-patch:9.2.0601: matchfuzzypos() returns garbage positions for long candidates (#40140)
Problem:  A needle that only matches past char 1024 gives an INT_MIN + 1
          score with unset positions, e.g.
          matchfuzzypos([repeat('a',1024)..'z'], 'az').
Solution: Drop the candidate when match_positions() returns SCORE_MIN.

closes: vim/vim#20435

52003f7fc1
2026-06-08 05:27:20 +00:00
zeertzjq
9bdbc176eb vim-patch:9.2.0598: tests: Test_statusline() is flaky (#40128)
Problem:  Test_statusline() occasionally fails in CI, reading buffer text
          instead of the status line (e.g. '9012...' instead of '57,39').
Solution: In s:get_statusline() redraw unconditionally and read the screen
          cells directly with screenstring(), instead of relying on
          ScreenLines() whose own redraw! can process events and change the
          window layout between the redraw and reading the cells.  This
          matches the already-stable s:Assert_match_statusline() helper in
          test_statuslineopt.vim.

closes: vim/vim#20428

db3ce018b5

Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 06:33:02 +02:00
zeertzjq
e887cfb3b5 vim-patch:9.2.0597: [security]: possible code execution with python complete (#40117)
Problem:  [security]: another possible code execution with python complete
          (David Carliez)
Solution: Strip default expressions and annotations from generated
          source for pythoncomplete and python3complete.

Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-65p9-mwwx-7468

c8c63673bc

Co-authored-by: Christian Brabandt <cb@256bit.org>
2026-06-05 04:59:44 +02:00
glepnir
5e3b655ad4 vim-patch:9.2.0591: 'scrolljump' ignored when scrolling up (#40106)
Problem:  srolljump=-100 only scrolls half a page going up, but works
          fine going down. update_topline() always falls back to
          scroll_cursor_halfway() when the cursor is far above topline.
Solution: Only center when sj is smaller than half the window. Otherwise
          call scroll_cursor_top like the downward path does (glepnir).

fixes:  vim/vim#1527
closes: vim/vim#20366

a4a60c0fdb
2026-06-04 06:21:59 +02:00
zeertzjq
fa5ed94852 vim-patch:9.2.0589: filetype: xinitrc files are not recognized (#40102)
Problem:  filetype: xinitrc files are not recognized
Solution: Detect xinitrc and xserverrc files as sh filetype
          (Enrico Maria De Angelis)

Reference:
https://wiki.archlinux.org/title/Xinit#Configuration

closes: vim/vim#20419

5b76ddcc52

Co-authored-by: Enrico Maria De Angelis <enricomaria.dean6elis@gmail.com>
2026-06-03 22:12:11 +02:00
zeertzjq
5a8e4cc5fa vim-patch:9.2.0581: After maximizing and deleting the quickfix buffer, window height is wrong (#40092)
Problem:  After maximizing and deleting the quickfix buffer, window
          height is wrong (tertium)
Solution: Reset the winfixheight option when a quickfix buffer is
          deleted from a window (Yegappan Lakshmanan)

fixes:  vim/vim#3378
closes: vim/vim#20403

07f055f579

Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
2026-06-02 18:30:20 +00:00
glepnir
a5d4b4e0fc vim-patch:9.2.0585: line number wrong after undoing a deletion in quickfix buffer (#40081)
Problem:  Deleting a quickfix line and undoing it leaves the entry
          pointing one line below where it should.
Solution: Don't shift already cleared entries in qf_mark_adjust.

closes: vim/vim#20379

64982d6010
2026-06-02 07:30:12 +02:00