]> granicus.if.org Git - vim/commitdiff
patch 9.0.0765: with a Visual block a put command column may go negative v9.0.0765
authorBram Moolenaar <Bram@vim.org>
Sat, 15 Oct 2022 18:04:05 +0000 (19:04 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 15 Oct 2022 18:04:05 +0000 (19:04 +0100)
Problem:    With a Visual block a put command column may go negative.
Solution:   Check that the column does not become negative.

src/register.c
src/testdir/test_visual.vim
src/version.c

index bede88b9a06ff4d01b160750da710da6e74625f0..21ed43699d4b90cc6ace1eca6b7d2ace8c6a7f60 100644 (file)
@@ -1960,6 +1960,8 @@ do_put(
        // adjust '] mark
        curbuf->b_op_end.lnum = curwin->w_cursor.lnum - 1;
        curbuf->b_op_end.col = bd.textcol + totlen - 1;
+       if (curbuf->b_op_end.col < 0)
+           curbuf->b_op_end.col = 0;
        curbuf->b_op_end.coladd = 0;
        if (flags & PUT_CURSEND)
        {
index 66a44c52ca7c96fbcc7b770d3c8c6567097b1573..a7f8ec4d41a44c953dadd1eb512cf8f6723caf96 100644 (file)
@@ -483,6 +483,18 @@ func Test_visual_block_put()
   bw!
 endfunc
 
+func Test_visual_block_put_invalid()
+  enew!
+  behave mswin
+  norm yy
+  norm v)P\11s/^/        
+  " this was causing the column to become negative
+  silent norm ggv)\16P
+
+  bwipe!
+  behave xterm
+endfunc
+
 " Visual modes (v V CTRL-V) followed by an operator; count; repeating
 func Test_visual_mode_op()
   new
index dc5e40177794255a8cb7391270cde09ece928be0..017b311fbdcfc829a73bda73ffea3da3eef6aaff 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    765,
 /**/
     764,
 /**/