diff 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
line wrap: on
line diff
--- a/src/ops.c
+++ b/src/ops.c
@@ -3774,16 +3774,25 @@ do_put(
 	 */
 	if (y_type == MCHAR && y_size == 1)
 	{
-	    linenr_T end = curbuf->b_visual.vi_end.lnum;
-
-	    if (curbuf->b_visual.vi_end.lnum < curbuf->b_visual.vi_start.lnum)
-		end = curbuf->b_visual.vi_start.lnum;
+	    linenr_T end;
+
+	    if (VIsual_active)
+	    {
+		end = curbuf->b_visual.vi_end.lnum;
+		if (end < curbuf->b_visual.vi_start.lnum)
+		    end = curbuf->b_visual.vi_start.lnum;
+	    }
 
 	    do {
 		totlen = count * yanklen;
 		if (totlen > 0)
 		{
 		    oldp = ml_get(lnum);
+		    if (VIsual_active && col > (int)STRLEN(oldp))
+		    {
+			lnum++;
+			continue;
+		    }
 		    newp = alloc_check((unsigned)(STRLEN(oldp) + totlen + 1));
 		    if (newp == NULL)
 			goto end;	/* alloc() gave an error message */