Mercurial > vim
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; |