patch 8.0.0225: put in Visual block mode terminates early

Problem:    When a block is visually selected and put is used on the end of
            the selection only one line is changed.
Solution:   Check for the end properly. (Christian Brabandt, neovim issue
            5781)
diff --git a/src/ops.c b/src/ops.c
index 4d01ef1..1abb8da 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -3774,6 +3774,11 @@
 	 */
 	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;
+
 	    do {
 		totlen = count * yanklen;
 		if (totlen > 0)
@@ -3801,7 +3806,7 @@
 		}
 		if (VIsual_active)
 		    lnum++;
-	    } while (VIsual_active && lnum <= curbuf->b_visual.vi_end.lnum);
+	    } while (VIsual_active && lnum <= end);
 
 	    if (VIsual_active) /* reset lnum to the last visual line */
 		lnum--;
diff --git a/src/testdir/test_put.vim b/src/testdir/test_put.vim
index 612bdab..0154de1 100644
--- a/src/testdir/test_put.vim
+++ b/src/testdir/test_put.vim
@@ -10,3 +10,14 @@
   call assert_equal("\u2500x", getline(1))
   bwipe!
 endfunc
+
+func Test_put_char_block()
+  new
+  call setline(1, ['Line 1', 'Line 2'])
+  f Xfile_put
+  " visually select both lines and put the cursor at the top of the visual
+  " selection and then put the buffer name over it
+  exe "norm! G0\<c-v>ke\"%p"
+  call assert_equal(['Xfile_put 1', 'Xfile_put 2'], getline(1,2))
+  bw!
+endfunc
diff --git a/src/version.c b/src/version.c
index 86d7816..6020472 100644
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    225,
+/**/
     224,
 /**/
     223,