mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
fix(undo): fix crash caused by checking undolevels in wrong buffer
fixes #24894
This commit is contained in:
parent
9b9030ff2c
commit
840749d6c9
@ -3208,15 +3208,13 @@ u_header_T *u_force_get_undo_header(buf_T *buf)
|
|||||||
}
|
}
|
||||||
// Create the first undo header for the buffer
|
// Create the first undo header for the buffer
|
||||||
if (!uhp) {
|
if (!uhp) {
|
||||||
// Undo is normally invoked in change code, which already has swapped
|
|
||||||
// curbuf.
|
|
||||||
// Args are tricky: this means replace empty range by empty range..
|
// Args are tricky: this means replace empty range by empty range..
|
||||||
u_savecommon(curbuf, 0, 1, 1, true);
|
u_savecommon(buf, 0, 1, 1, true);
|
||||||
|
|
||||||
uhp = buf->b_u_curhead;
|
uhp = buf->b_u_curhead;
|
||||||
if (!uhp) {
|
if (!uhp) {
|
||||||
uhp = buf->b_u_newhead;
|
uhp = buf->b_u_newhead;
|
||||||
if (get_undolevel(curbuf) > 0 && !uhp) {
|
if (get_undolevel(buf) > 0 && !uhp) {
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,7 @@ local command = helpers.command
|
|||||||
local bufmeths = helpers.bufmeths
|
local bufmeths = helpers.bufmeths
|
||||||
local feed = helpers.feed
|
local feed = helpers.feed
|
||||||
local pcall_err = helpers.pcall_err
|
local pcall_err = helpers.pcall_err
|
||||||
|
local assert_alive = helpers.assert_alive
|
||||||
|
|
||||||
describe('api/buf', function()
|
describe('api/buf', function()
|
||||||
before_each(clear)
|
before_each(clear)
|
||||||
@ -41,6 +42,14 @@ describe('api/buf', function()
|
|||||||
eq(1, curbuf_depr('line_count'))
|
eq(1, curbuf_depr('line_count'))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it("doesn't crash just after set undolevels=1 #24894", function()
|
||||||
|
local buf = meths.create_buf(false, true)
|
||||||
|
meths.buf_set_option(buf, 'undolevels', -1)
|
||||||
|
meths.buf_set_lines(buf, 0, 1, false, { })
|
||||||
|
|
||||||
|
assert_alive()
|
||||||
|
end)
|
||||||
|
|
||||||
it('cursor position is maintained after lines are inserted #9961', function()
|
it('cursor position is maintained after lines are inserted #9961', function()
|
||||||
-- replace the buffer contents with these three lines.
|
-- replace the buffer contents with these three lines.
|
||||||
request('nvim_buf_set_lines', 0, 0, -1, 1, {"line1", "line2", "line3", "line4"})
|
request('nvim_buf_set_lines', 0, 0, -1, 1, {"line1", "line2", "line3", "line4"})
|
||||||
|
Loading…
Reference in New Issue
Block a user