summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-02-03 23:04:46 +0100
committerBram Moolenaar <Bram@vim.org>2021-02-03 23:04:46 +0100
commit92bb83e41ca42d0d00d21753810d92485c808a50 (patch)
tree0d04da8a43972e3cfcda1a939e1075c46252e889
parent8ab375706e6712308f8cf7529bcae56684a6f385 (diff)
downloadvim-git-92bb83e41ca42d0d00d21753810d92485c808a50.tar.gz
patch 8.2.2465: using freed memory in :psearchv8.2.2465
Problem: Using freed memory in :psearch. (houyunsong) Solution: Check the current window is still valid. Fix flaky test.
-rw-r--r--src/search.c2
-rw-r--r--src/testdir/test_autocmd.vim28
-rw-r--r--src/version.c2
3 files changed, 29 insertions, 3 deletions
diff --git a/src/search.c b/src/search.c
index 3a4d4589a..d8c21f43c 100644
--- a/src/search.c
+++ b/src/search.c
@@ -3864,6 +3864,8 @@ search_line:
#if defined(FEAT_QUICKFIX)
if (g_do_tagpreview != 0)
{
+ if (!win_valid(curwin_save))
+ break;
if (!GETFILE_SUCCESS(getfile(
curwin_save->w_buffer->b_fnum, NULL,
NULL, TRUE, lnum, FALSE)))
diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim
index b1a235c8f..cb5c62f52 100644
--- a/src/testdir/test_autocmd.vim
+++ b/src/testdir/test_autocmd.vim
@@ -60,7 +60,7 @@ if has('timers')
let g:triggered = 0
au CursorHoldI * let g:triggered += 1
set updatetime=20
- call timer_start(100, 'ExitInsertMode')
+ call timer_start(200, 'ExitInsertMode')
call feedkeys('a', 'x!')
call assert_equal(1, g:triggered)
unlet g:triggered
@@ -2413,9 +2413,18 @@ func Test_autocmd_was_using_freed_memory()
pedit xx
n x
- au WinEnter * quit
+ augroup winenter
+ au WinEnter * if winnr('$') > 2 | quit | endif
+ augroup END
split
- au! WinEnter
+
+ augroup winenter
+ au! WinEnter
+ augroup END
+
+ bwipe xx
+ bwipe x
+ pclose
endfunc
func Test_BufWrite_lockmarks()
@@ -2737,4 +2746,17 @@ func Test_autocmd_closes_window()
au! BufWinLeave
endfunc
+func Test_autocmd_quit_psearch()
+ sn aa bb
+ augroup aucmd_win_test
+ au!
+ au BufEnter,BufLeave,BufNew,WinEnter,WinLeave,WinNew * if winnr('$') > 1 | q | endif
+ augroup END
+ ps /
+
+ augroup aucmd_win_test
+ au!
+ augroup END
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index a93b81a41..7f672301e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2465,
+/**/
2464,
/**/
2463,