mirror of
https://github.com/neovim/neovim.git
synced 2026-07-22 00:51:33 +00:00
extmarks: fix crash due to invalid column values in inccommand preview
This used to use -1 and MAXCOL values. Make sure in range values are used.
This commit is contained in:
@@ -18,6 +18,7 @@ local wait = helpers.wait
|
||||
local nvim = helpers.nvim
|
||||
local sleep = helpers.sleep
|
||||
local nvim_dir = helpers.nvim_dir
|
||||
local assert_alive = helpers.assert_alive
|
||||
|
||||
local default_text = [[
|
||||
Inc substitution on
|
||||
@@ -84,6 +85,7 @@ local function common_setup(screen, inccommand, text)
|
||||
[14] = {foreground = Screen.colors.White, background = Screen.colors.Red},
|
||||
[15] = {bold=true, foreground=Screen.colors.Blue},
|
||||
[16] = {background=Screen.colors.Grey90}, -- cursorline
|
||||
[17] = {foreground = Screen.colors.Blue1},
|
||||
vis = {background=Screen.colors.LightGrey}
|
||||
})
|
||||
end
|
||||
@@ -2291,6 +2293,76 @@ describe(":substitute", function()
|
||||
]])
|
||||
end)
|
||||
|
||||
it("inccommand=split, contraction of two subsequent NL chars", function()
|
||||
-- luacheck: push ignore 611
|
||||
local text = [[
|
||||
AAA AA
|
||||
|
||||
BBB BB
|
||||
|
||||
CCC CC
|
||||
|
||||
]]
|
||||
-- luacheck: pop
|
||||
|
||||
-- This used to crash, but more than 20 highlight entries are required
|
||||
-- to reproduce it (so that the marktree has multiple nodes)
|
||||
common_setup(screen, "split", string.rep(text,10))
|
||||
feed(":%s/\\n\\n/<c-v><c-m>/g")
|
||||
screen:expect{grid=[[
|
||||
CCC CC |
|
||||
AAA AA |
|
||||
BBB BB |
|
||||
CCC CC |
|
||||
|
|
||||
{11:[No Name] [+] }|
|
||||
| 1| AAA AA |
|
||||
| 2|{12: }BBB BB |
|
||||
| 3|{12: }CCC CC |
|
||||
| 4|{12: }AAA AA |
|
||||
| 5|{12: }BBB BB |
|
||||
| 6|{12: }CCC CC |
|
||||
| 7|{12: }AAA AA |
|
||||
{10:[Preview] }|
|
||||
:%s/\n\n/{17:^M}/g^ |
|
||||
]]}
|
||||
assert_alive()
|
||||
end)
|
||||
|
||||
it("inccommand=nosplit, contraction of two subsequent NL chars", function()
|
||||
-- luacheck: push ignore 611
|
||||
local text = [[
|
||||
AAA AA
|
||||
|
||||
BBB BB
|
||||
|
||||
CCC CC
|
||||
|
||||
]]
|
||||
-- luacheck: pop
|
||||
|
||||
common_setup(screen, "nosplit", string.rep(text,10))
|
||||
feed(":%s/\\n\\n/<c-v><c-m>/g")
|
||||
screen:expect{grid=[[
|
||||
CCC CC |
|
||||
AAA AA |
|
||||
BBB BB |
|
||||
CCC CC |
|
||||
AAA AA |
|
||||
BBB BB |
|
||||
CCC CC |
|
||||
AAA AA |
|
||||
BBB BB |
|
||||
CCC CC |
|
||||
AAA AA |
|
||||
BBB BB |
|
||||
CCC CC |
|
||||
|
|
||||
:%s/\n\n/{17:^M}/g^ |
|
||||
]]}
|
||||
assert_alive()
|
||||
end)
|
||||
|
||||
it("inccommand=split, multibyte text", function()
|
||||
common_setup(screen, "split", multibyte_text)
|
||||
feed(":%s/£.*ѫ/X¥¥")
|
||||
|
||||
Reference in New Issue
Block a user