Fixes the following Coverity warning:
*** CID 549779: Integer handling issues (INTEGER_OVERFLOW)
/src/nvim/undo.c: 717 in u_get_undo_file_name()
711 dir_name[dir_len] = NUL;
712
713 // Remove trailing pathseps from directory name
714 char *p = &dir_name[dir_len - 1];
715 while (vim_ispathsep(*p)) {
716 *p-- = NUL;
>>> CID 549779: Integer handling issues (INTEGER_OVERFLOW)
>>> Expression "dir_len--", where "dir_len" is known to be equal to 0, underflows the type of "dir_len--", which is type "size_t".
717 dir_len--;
718 }
719
720 bool has_directory = os_isdir(dir_name);
721 if (!has_directory && *dirp == NUL && !reading) {
722 // Last directory in the list does not exist, create it.
(cherry picked from commit 6b0367481c)
Problem: Normal Windows builtin-TUI startup spawns the embedded server as DETACHED_PROCESS, which breaks Ctrl-C delivery to :terminal jobs.
Solution: Restores the default behavior once the embedded server has a
console so terminal jobs inherit it.
(cherry picked from commit 8bb7533639)
Refactor #37977: instead of allocating a hidden console at startup, borrow the parent's console via AttachConsole() and only create an isolated hidden console when :detach is called, with fd 0/1/2 re-bound to the new CONIN$/CONOUT$.
(cherry picked from commit 789741bb83)
Problem: 'inccommand' preview is not executed after setcmdline(),
and as a result cmdline_show event is emitted when redrawing
is not allowed (5b6477be).
Solution: Call command_line_changed() when ccline.cmdbuff_replaced is
set (by setcmdline()).
(cherry picked from commit 1354787029)
Problem: No way of inspecting the (user-added) filetype detection rules.
Solution: Add `vim.filetype.inspect()` returning copies of the internal
`extension`, `filename`, `pattern` tables. Due to the dynamic nature of
filetype detection, this will in general not allow getting the list of
known filetypes, but at least one can see if a given extension is known.
Problem:
We normally get the background color via continuous reporting. However,
if we were backgrounded while the light/dark mode changed, we won't have
received the report, and we'll have the wrong background color.
Without this change, if you background nvim, toggle the light/dark mode,
resume, and check `:set bg`, it will not match the current state.
Solution:
Query it on resume as well. (This requires separating the query from the
flush, to just do the query along with all the others, while waiting to
flush until we've set up uv.)
With this change, if you background nvim, toggle the light/dark mode,
resume, and check `:set bg`, it will have updated.
Problem: `buf` is optional even though its needed to perform conversions
and the ordering of `(buf, row, col)` is not consistent.
Solution: make `buf` mandatory on `vim.range` and `vim.pos` and enforce
the `buf, row, col` ordering
(cherry picked from commit 01be30f638)
Following is a list of commits (fixes/features only) in this release.
See `:help news` in Nvim for release notes.
FEATURES
--------------------------------------------------------------------------------
- 8a79d3a3bb :restart: reattach all UIs (#38683)
FIXES
--------------------------------------------------------------------------------
- 415626d46d :restart: inherit stderr fd on Unix (#38755)
- 8b3f3113c4 :restart: only pass --headless when there is no UI (#38580)
- e5792f6353 api: avoid error when parsing invalid expr after :echo (#38695)
- 6ef5f59be6 channel: crash on exit after closing v:stderr channel (#38754)
- 14ee84e7a5 cmdline: redraw cmdline after empty message (#38485)
- b2702913b9 defaults: check for TUI on non-stdio channel on startup (#38581)
- c3e52bb264 events: avoid recursive loop_uv_run() from vim.ui_attach() shell message
- 4bf170d79d help: show error when using :help! with nothing at cursor #38775
- c692e848e9 lsp: do not respond to codelens refresh if a request is already scheduled (#38801)
- 2eb14c54bc lsp: highlight snippet preview when server can't completionItem/resolve (#38534)
- f2764a596d lsp: reset document color processed version on clear (#38582)
- 8f7cbf6d66 lsp: use `winresetview()` to avoid switching to normal mode (#38641)
- 6cb439ac9e net: handle remote archive URLs via tar/zip browse #38744
- 35a9bf8785 pack: avoid eager vim.version call #38705
- fdf94493cf pack: use `uv.available_parallelism()` to compute number of threads #38717
- 60a24d707c termkey: use terminfo for (shift+)left/right keys
- 9f16ad8ca3 treesitter: select reset to "v" visualmode()
- 2d9619fac7 treesitter: select with node ending with unicode char (#38557)
- d83141c0f2 ui2: allow empty argument for enable() #38605
- b924afb36b ui2: correct buffer reference in msg:start_timer() (#38600)
- 131a3cacb3 ui2: prevent flicker when entering pager from expanded cmdline (#38662)
- bac7c3a996 ui2: update spill indicator when appending to expanded cmdline #38715
- dee6d2ad97 ui2: vim.on_key should return nil instead of false (#38668)
- e7a07364ad vim.net: check if vim.system's stdout is nil #38713
- 32ca1aae88 window: clear cmdline 'ruler' when window is closed (#38631)
- d660233edf windows: force console codepage to UTF-8 for shell/system() #38742
PERFORMANCE
--------------------------------------------------------------------------------
- 3de423eb20 vim.pos: use `nvim_buf_line_count` instead of fetching all lines #38686
BUILD
--------------------------------------------------------------------------------
- 38b5cfc74a cmake: allow ignoring deps sha
VIM PATCHES
--------------------------------------------------------------------------------
- 90b4f02b44 068c060: runtime(rustfmt): not correctly escaping directory names (#38597)
- 304c0ac9f9 12f6f20: runtime(sh): Keep function name patterns engine neutral (#38719)
- 10bd554c0f 82ebaa7: runtime(racket): Make visual K mapping more robust for shell injection (#38677)
- c084ab9f57 9.2.0276: [security]: modeline security bypass (#38657)
- 04fabbf32d 9.2.0277: tests: test_modeline.vim fails (#38672)
- 3e2ce64f88 9.2.0280: [security]: path traversal issue in zip.vim (#38693)
- 58cc2fdc5f 9.2.0285: :syn sync grouphere may go beyond end of line (#38727)
- bf084967d7 9.2.0299: runtime(zip): may write using absolute paths (#38810)
- a837c906bb 9.2.0303: tests: zip plugin tests don't check for warning message properly
- c09e82d12a 9.2.0304: tests: test for 9.2.0285 doesn't always fail without the fix
- dd85c13382 runtime file updates (#38659)
REFACTOR
--------------------------------------------------------------------------------
- 49133b4f77 typval.c: fix wrong argument to macro (#38813)
REVERTED CHANGES
--------------------------------------------------------------------------------
- 8e490e70ed "fix(scripts): gen_terminfo clears Windows terminfo definitions #36736"
- ad0adbb1b2 "refactor(process): don't read from PTY master using uv_pipe_t" (#37401)
Problem: vim.ui_attach() msg_show callback runs the risk of a recursive
loop_uv_run() when trying to display a message from a shell
command stream.
Solution: Schedule the message callback on the fast_events queue.
(cherry picked from commit fa302037f9)
Problem: When the terminal is very large, test for 9.2.0285 doesn't
trigger an ASAN error without the fix.
Solution: Use a window with fixed height (zeertzjq)
closes: vim/vim#19924b03970f41f
(cherry picked from commit f8695fc529)
Problem: zip plugin tests may match messages from previous test cases
when checking for warning message.
Solution: Clear messages at the start of these tests (zeertzjq).
closes: vim/vim#19926a1f4259e68
(cherry picked from commit c2d7f6b642)
Problem: runtime(zip): may write using absolute paths
(syndicate)
Solution: Detect this case and abort on Unix, warn in the documentation
about possible issues
46f530e517
Co-authored-by: Christian Brabandt <cb@256bit.org>
(cherry picked from commit 4aa8969d29)
Problem: Commands that rely on Git may need its version to perform more
targeted actions (like decide which arguments are safe to use).
For performance, computing this version is delayed up until it is
needed (like to not compute on regular startup), but not done before
every Git operation (as it is too much and can be done better).
This requires storing the Git version in a variable which is currently
initiated via `vim.version.parse()` call (most probably because it was
easier to handle Lua types this way).
However, the problem is that this results in sourcing `vim.version`
and computing `vim.version.parse` on every startup even if no Git
operation would be done.
Solution: Don't call `vim.version.parse()` during `require('vim.pack')`
and ensure its more precise lazy computation.
(cherry picked from commit 157c7bccb0)
Problem:
On Windows, `:!echo тест` shows `????` because the console code page defaults to a legacy ANSI encoding (e.g. CP1252) instead of `UTF-8`
Solution:
Call `SetConsoleOutputCP(CP_UTF8)` and `SetConsoleCP(CP_UTF8)` in `do_os_system()` before spawning child processes, and restore the original values after. It covers both `:!` and `system()` since they both go through `do_os_system()`
(cherry picked from commit bba48ee1b0)
Problem:
Opening .tar.gz or .zip URLs shows raw binary instead of using the archive plugins.
Solution:
Similar to the original netrw implementation, the autocmd should detect
archive URLs, download them to a temp file and the open them with
tar/zip handlers already bundled as vim plugins.
(cherry picked from commit 6d420feaef)
Problem:
Apparently vim.SystemCompleted.stdout can also be nil, even without a
custom stdout handler. (Although the docs can be interpreted otherwise).
Solution:
Explicitly check for nil and set the result body to an empty string if
stdout was nil.
(cherry picked from commit 398ee83f4f)
Problem: Computing number of threads for parallel asynchronous
computation using `uv.cpu_info()` can be slow. This is especially
noticeable since it is pre-computed on every `require('vim.pack')` and
not only when parallelism is needed.
Solution: Use `uv.available_parallelism()` to compute number of threads
in a helper function.
(cherry picked from commit 3cba8df041)
It's possible to still show the old Easter egg, but then the user won't
know about the new feature, so showing E349 is better.
(cherry picked from commit 9705a1c13b)
Problem: When messages are appended to an already expanded cmdline,
the spilled lines indicator is not updated.
Solution: Remove early return for updating virtual text while cmdline is
expanded, guard updating "msg" virt_text at callsite instead.
(cherry picked from commit 2663f51890)
Problem: Crash on exit after closing v:stderr channel when piping
to stdin.
Solution: Reopen stderr as /dev/null or NUL instead of closing it.
This also avoids writing to an related file if one is opened
after closing v:stderr.
(cherry picked from commit e20c4ea966)
Problem: :syn sync grouphere may go beyond end of line.
Solution: Start searching for the end of region at the end of match
instead of a possibly invalid position (zeertzjq).
closes: vim/vim#19896b7cffc8434
(cherry picked from commit d7ef77d175)
Request less backtracking to function-name candidates for
nonlinear patterns with any regexp engine BUT force using
the old engine with these patterns to avoid incurring an
additional penalty, according to ":syntime report", when the
new regexp engine is preferred.
fixes: vim/vim#19847closes: vim/vim#1984912f6f20552
Co-authored-by: Aliaksei Budavei <0x000c70@gmail.com>
(cherry picked from commit 3cb79189f3)
FAILED test/functional/terminal/cursor_spec.lua @ 419: :terminal cursor uses the correct attributes
test/functional/terminal/cursor_spec.lua:448: Expected objects to be the same.
Passed in:
(string) 'block'
Expected:
(string) 'vertical'
stack traceback:
test/functional/terminal/cursor_spec.lua:448: in function <test/functional/terminal/cursor_spec.lua:419>
(cherry picked from commit 596a7a32f3)
Problem: Parsing :echo followed by invalid expression leads to error.
Solution: Suppress error when skipping over expression.
(cherry picked from commit f2cdf73afc)
Problem: tests: test_modeline.vim fails (after v9.2.0276)
Solution: Rewrite the tests to use the existing s:modeline_fails()
function, update documentation (zeertzjq).
8c8772c6b3
(cherry picked from commit 65e2218585)
* vim-patch:e551e71: runtime(tera): use fnameescape() when loading separate syntax files
e551e71d7e
Co-authored-by: Christian Brabandt <cb@256bit.org>
(cherry picked from commit ec1bea9c05)
* vim-patch:374f06f: runtime(racket): Use shellescape() to harden the K mapping
fyi: @benknoble
374f06ffd8
Co-authored-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Michał Majchrowicz <mmajchrowicz@afine.com>
(cherry picked from commit d29db48e0a)
---------
Co-authored-by: zeertzjq <zeertzjq@outlook.com>
Co-authored-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Michał Majchrowicz <mmajchrowicz@afine.com>
fix(ui2): flicker when entering pager from expanded cmdline #38639
Problem: 'showcmd' causes flickering when pressing "g<" to enter the
pager when the cmdline is expanded for messages.
Initial keypress for an incomplete mapping is not giving 'showcmd'
feedback while cmdline is expanded for messages (which is only
dismissed upon the vim.on_key callback after 'timeoutlen').
Solution: Delay dismissing expanded cmdline when vim.on_key() callback
receives "g".
Place 'showcmd' "last" virtual text during expanded cmdline.
(cherry picked from commit 75e5e37942)
Co-authored-by: luukvbaal <luukvbaal@gmail.com>
Problem:
Since neovim 0.12, shift + arrow keys no longer works in rxvt-unicode
(TERM=rxvt-unicode-256color).
Solution:
Re-add `left` and `right` to `wanted_termkeys` so they're read from
terminfo instead of being handled by driver-csi. There seems to be quite
a few other terminals that define kLFT in terminfo.src and these are
likely to be affected as well.
Fixes: https://github.com/neovim/neovim/issues/38571
Fixes: 4b678a499c ("refactor(termkey): make termkey use internal terminfo properly")
(cherry picked from commit c4283caa17)
Problem:
`gen_terminfo.lua`'s output is unpredictable and depends on the system
ncurses version.
Invoking `tic` on `scripts/windows.ti` alone makes it use the system
terminfo definitions for the `use=…` fragments in `windows.ti` such as:
use=xterm+256color, use=xterm+sl, use=xterm-new
This is particularly problematic on Debian, as they build ncurses with
`--with-xterm-kbs=del` [1], and thus some of the windows entries end up
with different definitions for `kTermKey_left`, which is almost
certainly not desired.
[1]: 2d238cf387/debian/rules (L149)
Solution:
This reverts commit 9f90992934.
(cherry picked from commit 7150ae0150)
Problem: When 'ruler' is in last line of the screen and the current
floating window is closed, the ruler is not cleared.
Solution: When closing the current floating window, redraw the cmdline
if that contained, and will no longer contain the 'ruler'.
(cherry picked from commit cd2a27507a)