diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-04-12 19:16:47 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-12 19:16:47 +0800 |
commit | 7e1e906738ae8cf2d38ded4be3bef50d72b7c2a7 (patch) | |
tree | 7ced47de808516f092020d983504c84b41c90e8d /src/nvim/window.c | |
parent | dbd5242d8e10db4ed077547755f0d84aa8261cb5 (diff) | |
download | rneovim-7e1e906738ae8cf2d38ded4be3bef50d72b7c2a7.tar.gz rneovim-7e1e906738ae8cf2d38ded4be3bef50d72b7c2a7.tar.bz2 rneovim-7e1e906738ae8cf2d38ded4be3bef50d72b7c2a7.zip |
vim-patch:8.2.4739: accessing freed memory after WinScrolled autocmd event (#18090)
Problem: Accessing freed memory after WinScrolled autocmd event.
Solution: Check the window pointer is still valid. (closes vim/vim#10156)
Remove the argument from may_trigger_winscrolled().
https://github.com/vim/vim/commit/d58862d18f091d3c14fa3647e724ef7eea1ecefa
Diffstat (limited to 'src/nvim/window.c')
-rw-r--r-- | src/nvim/window.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/nvim/window.c b/src/nvim/window.c index 08cdfa4ebe..2ca5128445 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -5246,8 +5246,8 @@ void shell_new_columns(void) win_reconfig_floats(); // The size of floats might change } -/// Trigger WinScrolled autocmd if window has scrolled. -void may_trigger_winscrolled(win_T *wp) +/// Trigger WinScrolled for "curwin" if needed. +void may_trigger_winscrolled(void) { static bool recursive = false; @@ -5255,6 +5255,7 @@ void may_trigger_winscrolled(win_T *wp) return; } + win_T *wp = curwin; if (wp->w_last_topline != wp->w_topline || wp->w_last_leftcol != wp->w_leftcol || wp->w_last_width != wp->w_width @@ -5266,10 +5267,13 @@ void may_trigger_winscrolled(win_T *wp) apply_autocmds(EVENT_WINSCROLLED, winid, winid, false, wp->w_buffer); recursive = false; - wp->w_last_topline = wp->w_topline; - wp->w_last_leftcol = wp->w_leftcol; - wp->w_last_width = wp->w_width; - wp->w_last_height = wp->w_height; + // an autocmd may close the window, "wp" may be invalid now + if (win_valid_any_tab(wp)) { + wp->w_last_topline = wp->w_topline; + wp->w_last_leftcol = wp->w_leftcol; + wp->w_last_width = wp->w_width; + wp->w_last_height = wp->w_height; + } } } |