mirror of
https://github.com/neovim/neovim.git
synced 2024-12-20 03:05:11 -07: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
|
||||
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..
|
||||
u_savecommon(curbuf, 0, 1, 1, true);
|
||||
u_savecommon(buf, 0, 1, 1, true);
|
||||
|
||||
uhp = buf->b_u_curhead;
|
||||
if (!uhp) {
|
||||
uhp = buf->b_u_newhead;
|
||||
if (get_undolevel(curbuf) > 0 && !uhp) {
|
||||
if (get_undolevel(buf) > 0 && !uhp) {
|
||||
abort();
|
||||
}
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ local command = helpers.command
|
||||
local bufmeths = helpers.bufmeths
|
||||
local feed = helpers.feed
|
||||
local pcall_err = helpers.pcall_err
|
||||
local assert_alive = helpers.assert_alive
|
||||
|
||||
describe('api/buf', function()
|
||||
before_each(clear)
|
||||
@ -41,6 +42,14 @@ describe('api/buf', function()
|
||||
eq(1, curbuf_depr('line_count'))
|
||||
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()
|
||||
-- replace the buffer contents with these three lines.
|
||||
request('nvim_buf_set_lines', 0, 0, -1, 1, {"line1", "line2", "line3", "line4"})
|
||||
|
Loading…
Reference in New Issue
Block a user