Problem: Clearing the screen doesn't clear the "last" virtual text.
Dupe counter virtual text is not increased beyond 1.
Solution: Clear "last" virtual text when clearing the screen.
Restore assignment lost in a previous commit.
vim-patch:e34458465 Optimize vim.ico
vim-patch:a092d249b ccfilter: buffer overflow in ccfilter.c with crafted compiler output
vim-patch:9.2.0679: [security]: Out-of-bounds read with text property virtual text
vim-patch:738e6863d runtime(doc): regenerate help tags
vim-patch:9.2.0681: configure: -lruby added even for a dynamic ruby build
vim-patch:9.2.0685: clipboard.c does not get the Wayland CFLAGS on GTK2
vim-patch:9.2.0687: popup_image_composites_frames() has improper if block scope
vim-patch:fefa6550f translation(ru): fix typo in Russian translation for the new tutor
vim-patch:a6c8c2d83 CI: Bump msys2/setup-msys2
vim-patch:9.2.0691: Solaris: Test_terminal_composing_unicode() fails
vim-patch:9.2.0693: tests: Test_suspend() may fail because of keyprotocol query
vim-patch:b7cf2a544 Add README.ja.txt and LICENSE.ja.txt
vim-patch:9.2.0696: GTK4: A few issues with toolbar support
vim-patch:e31ec2ef0 nsis: Remove NSIS Installer Code
vim-patch:8.2.0291: Vim9: assigning [] to list<string> doesn't work
vim-patch:8.2.0453: trailing space in job_start() command causes empty argument
vim-patch:8.2.0526: Gcc 9 complains about empty statement
vim-patch:8.2.2133: Vim9: checking for a non-empty string is too strict
vim-patch:8.2.2135: Vim9: #{ still seen as start of dict in some places
vim-patch:8.2.2137: Vim9: :echo and :execute give error for empty argument
vim-patch:8.2.2677: Vim9: cannot use only some of the default arguments
vim-patch:8.2.3456: Vim9: not all functions are tested with empty string argument
vim-patch:8.2.4229: possible crash when invoking timer callback fails
vim-patch:8.2.4872: Vim9: no error for using an expression only
vim-patch:8.2.4906: MS-Windows: cannot use transparent background
vim-patch:9.0.1053: default constructor arguments are not optional
vim-patch:9.0.2034: don't try to copy SMACK attribute, when none exist
vim-patch:9.2.0697: possible overflow when parsing CSI keys
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>
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#205759f9af034ad
Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a guarded "C++ 26 extensions" block (cpp_no_cpp26) covering new
lexical surface introduced since C++23:
- [[ ... ]] attributes as a region, so P3394 annotations carrying a
value expression (eg [[=foo{1}]]) no longer trip cErrInBracket on
their braces/parens. A \w\@1<! look-behind keeps it from matching a
subscripted immediately-invoked lambda (arr[[]{...}()]).
- ^^ reflection operator (P2996).
- [: :] splice brackets (P2996).
- contract_assert keyword (P2900).
Add input/cpp_cpp26.cpp exercising these constructs with screendumps,
and update dumps/cpp_noreturn_00.dump for the new [[ ]] attribute
delimiter highlighting.
closes: vim/vim#2057777099ed6b3
Co-authored-by: Gareth Lloyd <gareth@ignition-web.co.uk>
Problem: Some functions use any value as a string.
Solution: Check that the value is a non-empty string.
-----
Vim9 remains N/A.
5ccc79e880 ported relevant changes.
7bb4e74c38
Co-authored-by: Bram Moolenaar <Bram@vim.org>
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#205890cafe56b74
Co-authored-by: Doug Kearns <dougkearns@gmail.com>
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#20594fe65f23aca
Co-authored-by: glepnir <glephunter@gmail.com>
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#2059537a7e4944f
Include the unecessary but idiomatic leading '--' in the closing block
comment token.
E.g.,
--[[
...
--]]
closes: vim/vim#2059098bf999d58
Co-authored-by: Doug Kearns <dougkearns@gmail.com>
Problem: Error when using "none" for GUI color is confusing.
Solution: Mention that the name should perhaps be "NONE". (closesvim/vim#1400)
5b9f57262f
Co-authored-by: Bram Moolenaar <Bram@vim.org>
Explicitly match the LONG/SHORT size prefixes in integral, real and bits
denotations.
LONG/SHORT are matched as part of the denotation rather than as a mode.
closes: vim/vim#205124e6e1fc5ea
Co-authored-by: Doug Kearns <dougkearns@gmail.com>
Problem: [security]: potential powershell code execution in zip.vim
(DDugs)
Solution: Cleanup zip.vim, introduce PSEscape() to escape() potential powershell code,
use consistent s:Escape() in the various PowerShell functions
Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-x5fg-h5w9-9frfb2cc9be119
Co-authored-by: Christian Brabandt <cb@256bit.org>
Problem: Terminal background and truecolor detection runs only at startup,
gated on a UI being attached. A headless server has no UI then, so
`'background'` and `'termguicolors'` are never detected and remote
UIs ignore the terminal's theme.
Solution: Also (re)detect on UIEnter. The most recently attached terminal
wins; an explicit user value is preserved.
Problem: Writing a message with a large number of newlines
(:echo "foo\n"->repeat(1000000)) takes longer than it has to
(since c973c7ae).
Solution: Accumulate newlines in a single API call when possible.
Problem: LspNotify never passed a buffer when executing the autocmds, so
buffer-local LspNotify autocmd subscriptions didn't have the correct buf
in the event metadata. It was also wrapped in a schedule() so the actual
autocmd was delayed until after the event loop.
This could result in the wrong buffer receiving the notification if
multiple LspNotify autocmds with buffer filters were added. Only the
"latest" one would actually receive non-buffer-filtered autocmds, not
the matching one. It also caused listeners to receive the notification
"out of sync" with when the notification is actually sent. If a buffer
is being deleted (which fires a textDocument/didClose notification), the
notification is scheduled and fired after the buffer is already gone.
Solution: For LSP notifications that pertain to a particular buffer, set
it when executing the LspNotify autocmds so the callback functions that
are filtered on that buffer will get the correct notifications and the
metadata buf field will be correct. Additionally, there is no need to
wrap the LspNotify callback in vim.schedule when it can be called inline
when the notification to the rpc server is fired.
This is tested by removing now-unnecessary autocmds from semantic tokens
(InsertEnter and BufWinEnter should no longer be necessary now that
requests are fired by LspNotify). Without this fix, simply modifying a
buffer doesn't actually trigger LspNotify correctly, and the test for
that fails.
Problem: When multiline semantic token support was introduced, the loop
that finds the end line for a particular token didn't sanitize the token
length sent back by the LSP server. If the server returned an overflowed
length (near uint32 max), neovim would burn cpu and loop for an
extremely long time while trying to find the "end line" represented by
the massively large token, causing neovim to seemingly hang.
Solution: Stop looping once the calculated end_line reaches the actual
last line of the buffer.
Fixes#36257
Problem:
- Current 'statuscolumn' click label caveat is restrictive.
- v:virtnum is not unique to a line if it has both above and
below virtual lines.
- 'statuscolumn' click handler may expect v:virt/lnum to be set.
Solution:
- Store per-row click definitions for the statuscolumn in a
(nested line/virt number) map.
- Implement strategy that gives each 'statuscolumn' row a unique
v:virtnum.
- Set v:virt/lnum when determining which line is clicked.
vim-patch:9.2.0654: GTK4: using uninitialised colors in gui_mch_init()
vim-patch:9.2.0655: GTK4: missing NULL checks in vim_form_measure()
vim-patch:9.2.0657: GTK4: missing menu when right-clicking in tabline
vim-patch:9.2.0658: xxd: signed integer overflow in huntype()
vim-patch:9.2.0659: GTK4: no balloon support in GUI
vim-patch:9.2.0660: Dragging the scrollbar does not trigger WinScrolled
vim-patch:9.2.0665: GTK4: GTK critical error on exit printed
vim-patch:9.2.0667: patch 9.2.0590 was wrong
vim-patch:9.2.0668: GTK4: minimum horizontal size is too small
vim-patch:60899596a runtime(doc): Regenerate help tags file
vim-patch:9.2.0671: [security]: possible out-of-bounds read with sodium encrypted files
vim-patch:9.2.0672: corrupted text property causes internal error
vim-patch:9.2.0674: configure: clears dynamic ruby linker flags
vim-patch:9.2.0196: textprop: negative IDs and can cause a crash
vim-patch:9.2.0207: MS-Windows: freeze on second :hardcopy
vim-patch:9.2.0218: visual selection highlighting in X11 GUI is wrong.
vim-patch:9.2.0406: VisualNOS not used when Wayland selection ownership lost
This was initially added so that the __NVIM_DETACH environment variable
can be added to the jobs started in this test. That environment variable
is no longer needed, and there is also vim.tbl_extend() that can be used
to add an environment variable to a job anyway.
Also, make a shallow copy of opts.env in setup_child_nvim(), as mutating
the opts.env passed in may mask problems in other tests.
Problem: A wrapped command line and screen width may be redrawn
repeatedly after calls to `redrawstatus` from lua.
Solution: redrawcmd() redraws the command line, but msg_clr_eos() may
invalidate cmdline_was_last_drawn during the redraw process.
Restore cmdline_was_last_drawn when redrawcmd() completes.
Co-authored-by: Sam Reynoso <sam@codeoutpost.com>
Co-authored-by: Luuk van Baal <luukvbaal@gmail.com>
Problem: linked_editing_range was still doing most of the capability
boilerplate itself.
Solution: refactor it to make use of the common Capability framework for
handling enabling, disabling, etc.
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#20563b464c36bf9
Co-authored-by: Vladimír Marek <vlmarek13@gmail.com>
Patch 9.2.0306 fixed malformed lz4 extraction commands by using "tar -I lz4"
on Linux and leaving non-Linux tar implementations to auto-detect lz4 input.
That still fails on systems where tar does not support either -I lz4 or
automatic lz4 decompression, such as Solaris /usr/bin/tar.
Keep the existing Linux path using GNU tar's "-I lz4" support. For non-Linux
systems, use lz4 explicitly to decompress the archive to stdout and feed the
resulting tar stream to the configured tar extraction command. This is the
same style tar.vim already used for lz4 archives before patch 9.2.0306.
Follow-up for vim/vim#19925closes: vim/vim#20555b0ce576fbc
Co-authored-by: Vladimír Marek <vlmarek13@gmail.com>
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#2056188cbd00312
Co-authored-by: Vladimír Marek <vlmarek13@gmail.com>
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#20529closes: vim/vim#205481a96e07bf6
Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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#204072e7833bde9
Co-authored-by: Foxe Chen <chen.foxe@gmail.com>
Problem:
:Man does not syntax highlight codeblocks (injected language).
Analysis:
init_pager() swapped pcall(parse_ref, ref) return values order, so
vim.b.man_sect was set to the manpage name instead of the section
number, so C syntax highlighting did not load.
Solution:
Swap the calls.
Problem:
- Transient mutation of the parent env is visible to any concurrent
code. Or at least just kinda sloppy.
- Latent bug:`channel_job_start` queues the spawn and returns before
`uv_spawn` runs, so the prior `os_unsetenv` immediately after the call
could in principle race with the deferred spawn.
Solution:
Pass `env` to the channel.