aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2025-01-09 13:35:25 +0100
committerGitHub <noreply@github.com>2025-01-09 13:35:25 +0100
commit6dd7fcaafdc5d80948e1c4b05b19584de16528d6 (patch)
treecf7a19a9182275e4c49b4f5850047146ad453124
parent3f0adf90debb35b5a937480151a659d654106ff6 (diff)
parentf8c8a245aa5bdfc2092f7e910a2d4ce798cd188e (diff)
downloadrneovim-6dd7fcaafdc5d80948e1c4b05b19584de16528d6.tar.gz
rneovim-6dd7fcaafdc5d80948e1c4b05b19584de16528d6.tar.bz2
rneovim-6dd7fcaafdc5d80948e1c4b05b19584de16528d6.zip
Merge pull request #31898 from bfredl/termbomb
fix(terminal): don't crash on unprintable chars
-rw-r--r--src/nvim/vterm/screen.c2
-rw-r--r--test/functional/terminal/buffer_spec.lua13
2 files changed, 14 insertions, 1 deletions
diff --git a/src/nvim/vterm/screen.c b/src/nvim/vterm/screen.c
index f24e47e543..c91c6fb84f 100644
--- a/src/nvim/vterm/screen.c
+++ b/src/nvim/vterm/screen.c
@@ -909,7 +909,7 @@ int vterm_screen_get_cell(const VTermScreen *screen, VTermPos pos, VTermScreenCe
return 0;
}
- cell->schar = intcell->schar;
+ cell->schar = (intcell->schar == (uint32_t)-1) ? 0 : intcell->schar;
cell->attrs.bold = intcell->pen.bold;
cell->attrs.underline = intcell->pen.underline;
diff --git a/test/functional/terminal/buffer_spec.lua b/test/functional/terminal/buffer_spec.lua
index b6de687af9..cc807ba555 100644
--- a/test/functional/terminal/buffer_spec.lua
+++ b/test/functional/terminal/buffer_spec.lua
@@ -435,6 +435,19 @@ describe(':terminal buffer', function()
]])
end)
+ it('handles unprintable chars', function()
+ local screen = Screen.new(50, 7)
+ feed 'i'
+ local chan = api.nvim_open_term(0, {})
+ api.nvim_chan_send(chan, '\239\187\191') -- '\xef\xbb\xbf'
+ screen:expect([[
+ {18:<feff>}^ |
+ |*5
+ {5:-- TERMINAL --} |
+ ]])
+ eq('\239\187\191', api.nvim_get_current_line())
+ end)
+
it("handles bell respecting 'belloff' and 'visualbell'", function()
local screen = Screen.new(50, 7)
local chan = api.nvim_open_term(0, {})