comparison src/ops.c @ 10688:3d1872fbecc4 v8.0.0234

patch 8.0.0234: crash when using put in Visual mode commit https://github.com/vim/vim/commit/941c12da3c087fd04aa6c120a76bf28f19349d96 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Jan 24 19:55:43 2017 +0100 patch 8.0.0234: crash when using put in Visual mode Problem: When several lines are visually selected and one of them is short, using put may cause a crash. (Axel Bender) Solution: Check for a short line. (Christian Brabandt)
author Christian Brabandt <cb@256bit.org>
date Tue, 24 Jan 2017 20:00:04 +0100
parents bce3eccea39a
children d9aeddd9086b
comparison
equal deleted inserted replaced
10687:594fa10064a3 10688:3d1872fbecc4
3772 /* 3772 /*
3773 * simple case: insert into current line 3773 * simple case: insert into current line
3774 */ 3774 */
3775 if (y_type == MCHAR && y_size == 1) 3775 if (y_type == MCHAR && y_size == 1)
3776 { 3776 {
3777 linenr_T end = curbuf->b_visual.vi_end.lnum; 3777 linenr_T end;
3778 3778
3779 if (curbuf->b_visual.vi_end.lnum < curbuf->b_visual.vi_start.lnum) 3779 if (VIsual_active)
3780 end = curbuf->b_visual.vi_start.lnum; 3780 {
3781 end = curbuf->b_visual.vi_end.lnum;
3782 if (end < curbuf->b_visual.vi_start.lnum)
3783 end = curbuf->b_visual.vi_start.lnum;
3784 }
3781 3785
3782 do { 3786 do {
3783 totlen = count * yanklen; 3787 totlen = count * yanklen;
3784 if (totlen > 0) 3788 if (totlen > 0)
3785 { 3789 {
3786 oldp = ml_get(lnum); 3790 oldp = ml_get(lnum);
3791 if (VIsual_active && col > (int)STRLEN(oldp))
3792 {
3793 lnum++;
3794 continue;
3795 }
3787 newp = alloc_check((unsigned)(STRLEN(oldp) + totlen + 1)); 3796 newp = alloc_check((unsigned)(STRLEN(oldp) + totlen + 1));
3788 if (newp == NULL) 3797 if (newp == NULL)
3789 goto end; /* alloc() gave an error message */ 3798 goto end; /* alloc() gave an error message */
3790 mch_memmove(newp, oldp, (size_t)col); 3799 mch_memmove(newp, oldp, (size_t)col);
3791 ptr = newp + col; 3800 ptr = newp + col;