diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-04-20 21:12:30 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-04-20 21:12:30 +0200 |
commit | a364cdb648ae009fa7aa05382f5659335683d349 (patch) | |
tree | db5a75a4f1ec522dcad792847f8ebe4813e6a355 | |
parent | c03944151fec2d5469746642a949c8fcb5a744a8 (diff) |
patch 8.0.0571: negative line number when using :z^ in an empty bufferv8.0.0571
Problem: The cursor line number becomes negative when using :z^ in an empty
buffer. (neovim #6557)
Solution: Correct the line number. Also reset the column.
-rw-r--r-- | src/ex_cmds.c | 8 | ||||
-rw-r--r-- | src/testdir/test_ex_z.vim | 9 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 17 insertions, 2 deletions
diff --git a/src/ex_cmds.c b/src/ex_cmds.c index 4b0bdef59c..309474ce04 100644 --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -4664,6 +4664,8 @@ ex_z(exarg_T *eap) if (curs > curbuf->b_ml.ml_line_count) curs = curbuf->b_ml.ml_line_count; + else if (curs < 1) + curs = 1; for (i = start; i <= end; i++) { @@ -4686,7 +4688,11 @@ ex_z(exarg_T *eap) } } - curwin->w_cursor.lnum = curs; + if (curwin->w_cursor.lnum != curs) + { + curwin->w_cursor.lnum = curs; + curwin->w_cursor.col = 0; + } ex_no_reprint = TRUE; } diff --git a/src/testdir/test_ex_z.vim b/src/testdir/test_ex_z.vim index 608a36c490..6e03b0bff9 100644 --- a/src/testdir/test_ex_z.vim +++ b/src/testdir/test_ex_z.vim @@ -68,7 +68,7 @@ func Test_z() bw! endfunc -func Test_z_bug() +func Test_z_overflow() " This used to access invalid memory as a result of an integer overflow " and freeze vim. normal ox @@ -76,3 +76,10 @@ func Test_z_bug() z777777776666666 ') endfunc + +func Test_z_negative_lnum() + new + z^ + call assert_equal(1, line('.')) + bwipe! +endfunc diff --git a/src/version.c b/src/version.c index c169765849..81b98c11fc 100644 --- a/src/version.c +++ b/src/version.c @@ -765,6 +765,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 571, +/**/ 570, /**/ 569, |