aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbdelhakeem Osama <abdelhakeem.osama@hotmail.com>2019-08-25 10:11:22 +0300
committerJustin M. Keyes <justinkz@gmail.com>2019-08-25 09:11:22 +0200
commit2e621553c089ca6b7de5123a9c63a7a54ee06c20 (patch)
treeb445ce37ef995c7ecb6a785cb1de20d30d1f85a4
parent34e416667378a610943f614b97da9b865d622806 (diff)
downloadrneovim-2e621553c089ca6b7de5123a9c63a7a54ee06c20.tar.gz
rneovim-2e621553c089ca6b7de5123a9c63a7a54ee06c20.tar.bz2
rneovim-2e621553c089ca6b7de5123a9c63a7a54ee06c20.zip
teardown: fix win_free_all() heap-use-after-free #10839
Fixes #10838
-rw-r--r--src/nvim/window.c3
-rw-r--r--test/functional/api/vim_spec.lua5
2 files changed, 8 insertions, 0 deletions
diff --git a/src/nvim/window.c b/src/nvim/window.c
index 4173245439..b5d34bbbdb 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -2698,6 +2698,9 @@ void win_free_all(void)
win_T *wp = lastwin;
win_remove(lastwin, NULL);
(void)win_free_mem(wp, &dummy, NULL);
+ if (wp == aucmd_win) {
+ aucmd_win = NULL;
+ }
}
if (aucmd_win != NULL) {
diff --git a/test/functional/api/vim_spec.lua b/test/functional/api/vim_spec.lua
index cd45914552..0cd81619c1 100644
--- a/test/functional/api/vim_spec.lua
+++ b/test/functional/api/vim_spec.lua
@@ -1510,5 +1510,10 @@ describe('API', function()
|
]])
end)
+
+ it('does not cause heap-use-after-free on exit while setting options', function()
+ command('au OptionSet * q')
+ command('silent! call nvim_create_buf(0, 1)')
+ end)
end)
end)