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)
diff --git a/src/ops.c b/src/ops.c
index 1abb8da..2aee03d 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -3774,16 +3774,25 @@
 	 */
 	if (y_type == MCHAR && y_size == 1)
 	{
-	    linenr_T end = curbuf->b_visual.vi_end.lnum;
+	    linenr_T end;
 
-	    if (curbuf->b_visual.vi_end.lnum < curbuf->b_visual.vi_start.lnum)
-		end = curbuf->b_visual.vi_start.lnum;
+	    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 */
diff --git a/src/testdir/test_put.vim b/src/testdir/test_put.vim
index 0154de1..38c812b 100644
--- a/src/testdir/test_put.vim
+++ b/src/testdir/test_put.vim
@@ -21,3 +21,16 @@
   call assert_equal(['Xfile_put 1', 'Xfile_put 2'], getline(1,2))
   bw!
 endfunc
+
+func Test_put_char_block2()
+  new
+  let a = [ getreg('a'), getregtype('a') ]
+  call setreg('a', ' one ', 'v')
+  call setline(1, ['Line 1', '', 'Line 3', ''])
+  " visually select the first 3 lines and put register a over it
+  exe "norm! ggl\<c-v>2j2l\"ap"
+  call assert_equal(['L one  1', '', 'L one  3', ''], getline(1,4))
+  " clean up
+  bw!
+  call setreg('a', a[0], a[1])
+endfunc
diff --git a/src/version.c b/src/version.c
index 1b78243..8622e6d 100644
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    234,
+/**/
     233,
 /**/
     232,