]> granicus.if.org Git - vim/commitdiff
patch 8.2.5150: read past the end of the first line with ":0;'{" v8.2.5150
authorBram Moolenaar <Bram@vim.org>
Wed, 22 Jun 2022 18:08:38 +0000 (19:08 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 22 Jun 2022 18:08:38 +0000 (19:08 +0100)
Problem:    Read past the end of the first line with ":0;'{".
Solution:   When on line zero check the column is valid for line one.

src/ex_docmd.c
src/testdir/test_cmdline.vim
src/version.c

index 1185cd1550a61812b02f930c04f2e1f3f7154157..271e7e24663573ff1bf129f6aa9c19724e4f750e 100644 (file)
@@ -3411,10 +3411,13 @@ parse_cmd_address(exarg_T *eap, char **errormsg, int silent)
                curwin->w_cursor.lnum = eap->line2;
 
                // Don't leave the cursor on an illegal line or column, but do
-               // accept zero as address, so 0;/PATTERN/ works correctly.
+               // accept zero as address, so 0;/PATTERN/ works correctly
+               // (where zero usually means to use the first line).
                // Check the cursor position before returning.
                if (eap->line2 > 0)
                    check_cursor();
+               else
+                   check_cursor_col();
                need_check_cursor = TRUE;
            }
        }
index 9c08d138042abc92ceaeea3dff0101d0f309b300..36853369855ef6ffb0a103931cb84f11fc6331ae 100644 (file)
@@ -808,6 +808,14 @@ func Test_illegal_address2()
   call delete('Xtest.vim')
 endfunc
 
+func Test_mark_from_line_zero()
+  " this was reading past the end of the first (empty) line
+  new
+  norm oxxxx
+  call assert_fails("0;'(", 'E20:')
+  bwipe!
+endfunc
+
 func Test_cmdline_complete_wildoptions()
   help
   call feedkeys(":tag /\<c-a>\<c-b>\"\<cr>", 'tx')
index 609c95559d34740938b20fffc372c71ca673b5d8..b947061b3ffeaed3aa5e8ec8707f60978c0d3ae5 100644 (file)
@@ -734,6 +734,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    5150,
 /**/
     5149,
 /**/