summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-07-01 15:26:15 +0100
committerBram Moolenaar <Bram@vim.org>2022-07-01 15:26:15 +0100
commit3d51ce18ab1be4f9f6061568a4e7fabf00b21794 (patch)
tree3905f0cbee771f45d35ed552b33c3726482c4924
parentc2a79b87fc31080ba24394c0b30bab45f1bea852 (diff)
downloadvim-git-3d51ce18ab1be4f9f6061568a4e7fabf00b21794.tar.gz
patch 9.0.0017: accessing memory beyond the end of the linev9.0.0017
Problem: Accessing memory beyond the end of the line. Solution: Stop Visual mode when closing a window.
-rw-r--r--src/testdir/test_visual.vim12
-rw-r--r--src/version.c2
-rw-r--r--src/window.c2
3 files changed, 16 insertions, 0 deletions
diff --git a/src/testdir/test_visual.vim b/src/testdir/test_visual.vim
index c3230623b..e96526654 100644
--- a/src/testdir/test_visual.vim
+++ b/src/testdir/test_visual.vim
@@ -1469,5 +1469,17 @@ func Test_visual_paste_clipboard()
bwipe!
endfunc
+func Test_visual_area_adjusted_when_hiding()
+ " The Visual area ended after the end of the line after :hide
+ call setline(1, 'xxx')
+ vsplit Xfile
+ call setline(1, 'xxxxxxxx')
+ norm! $o
+ hid
+ norm! zW
+ bwipe!
+ bwipe!
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 5b737e1bc..5d1090913 100644
--- a/src/version.c
+++ b/src/version.c
@@ -736,6 +736,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 17,
+/**/
16,
/**/
15,
diff --git a/src/window.c b/src/window.c
index 992593bed..c91ebbcfe 100644
--- a/src/window.c
+++ b/src/window.c
@@ -2594,6 +2594,8 @@ win_close(win_T *win, int free_buf)
*/
if (wp->w_buffer != curbuf)
{
+ reset_VIsual_and_resel(); // stop Visual mode
+
other_buffer = TRUE;
win->w_closing = TRUE;
apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf);