From feee862064554a789891e3450762464a6ec2535d Mon Sep 17 00:00:00 2001 From: "Justin M. Keyes" Date: Sun, 28 Oct 2018 12:45:30 +0100 Subject: [PATCH] vim-patch:8.0.1193: crash when wiping buffer after getbufinfo() Problem: Crash when wiping out a buffer after using getbufinfo(). (Yegappan Lakshmanan) Solution: Remove b:changedtick from the buffer variables. (Note: The test changes in vim-patch:8.0.1193 were already included.) --- src/nvim/buffer.c | 2 ++ src/nvim/buffer_defs.h | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c index a545112360..ee87411523 100644 --- a/src/nvim/buffer.c +++ b/src/nvim/buffer.c @@ -757,6 +757,8 @@ static void free_buffer(buf_T *buf) handle_unregister_buffer(buf); buf_free_count++; free_buffer_stuff(buf, true); + // b:changedtick uses an item in buf_T, remove it now. + tv_dict_item_remove(buf->b_vars, (dictitem_T *)&buf->changedtick_di); unref_var_dict(buf->b_vars); aubuflocal_remove(buf); tv_dict_unref(buf->additional_data); diff --git a/src/nvim/buffer_defs.h b/src/nvim/buffer_defs.h index b11eaefdd0..5e700940b0 100644 --- a/src/nvim/buffer_defs.h +++ b/src/nvim/buffer_defs.h @@ -508,9 +508,9 @@ struct file_buffer { int b_changed; // 'modified': Set to true if something in the // file has been changed and not written out. - /// Change identifier incremented for each change, including undo + /// Change-identifier incremented for each change, including undo. /// - /// This is a dictionary item used to store in b:changedtick. + /// This is a dictionary item used to store b:changedtick. ChangedtickDictItem changedtick_di; varnumber_T b_last_changedtick; // b:changedtick when TextChanged or