Patch 7.4.2347
Problem: Crash when closing a buffer while Visual mode is active.
(Dominique Pelle)
Solution: Adjust the position before computing the number of lines.
When closing the current buffer stop Visual mode.
Files: src/buffer.c, src/normal.c, src/testdir/test_normal.vim
*** ../vim-7.4.2346/src/buffer.c 2016-09-04 23:41:36.973433429 +0200
--- src/buffer.c 2016-09-08 23:31:18.260925052 +0200
***************
*** 578,583 ****
--- 578,588 ----
if (buf->b_ffname == NULL)
del_buf = TRUE;
+ /* When closing the current buffer stop Visual mode before freeing
+ * anything. */
+ if (buf == curbuf)
+ end_visual_mode();
+
/*
* Free all things allocated for this buffer.
* Also calls the "BufDelete" autocommands when del_buf is TRUE.
***************
*** 1379,1384 ****
--- 1384,1393 ----
}
}
+ /* When closing the current buffer stop Visual mode. */
+ if (buf == curbuf)
+ end_visual_mode();
+
/*
* If deleting the last (listed) buffer, make it empty.
* The last (listed) buffer cannot be unloaded.
*** ../vim-7.4.2346/src/normal.c 2016-09-04 20:34:55.763537404 +0200
--- src/normal.c 2016-09-08 23:35:06.131082221 +0200
***************
*** 1609,1614 ****
--- 1609,1616 ----
oap->start = curwin->w_cursor;
}
+ /* Just in case lines were deleted that make the position invalid. */
+ check_pos(curwin->w_buffer, &oap->end);
oap->line_count = oap->end.lnum - oap->start.lnum + 1;
#ifdef FEAT_VIRTUALEDIT
***************
*** 9451,9460 ****
#ifdef FEAT_MBYTE
/* prevent from moving onto a trail byte */
if (has_mbyte)
- {
- check_pos(curwin->w_buffer, &oap->end);
mb_adjustpos(curwin->w_buffer, &oap->end);
- }
#endif
getvvcol(curwin, &(oap->start), &oap->start_vcol, NULL, &oap->end_vcol);
--- 9453,9459 ----
*** ../vim-7.4.2346/src/testdir/test_normal.vim 2016-09-06 20:37:38.206149358
+0200
--- src/testdir/test_normal.vim 2016-09-08 23:23:15.304888249 +0200
***************
*** 1998,2000 ****
--- 1998,2014 ----
" clean up
bw!
endfu
+
+ func! Test_normal47_visual_buf_wipe()
+ " This was causing a crash or ml_get error.
+ enew!
+ call setline(1,'xxx')
+ normal $
+ new
+ call setline(1, range(1,2))
+ 2
+ exe "norm \<C-V>$"
+ bw!
+ norm yp
+ set nomodified
+ endfu
*** ../vim-7.4.2346/src/version.c 2016-09-08 22:10:04.753618339 +0200
--- src/version.c 2016-09-08 23:34:18.543465683 +0200
***************
*** 765,766 ****
--- 765,768 ----
{ /* Add new patch number below this line */
+ /**/
+ 2347,
/**/
--
hundred-and-one symptoms of being an internet addict:
205. You're constantly yelling at your spouse, family, roommate, whatever,
for using the phone for stupid things...like talking.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.