From: Bram Moolenaar Date: Thu, 20 Apr 2017 19:12:30 +0000 (+0200) Subject: patch 8.0.0571: negative line number when using :z^ in an empty buffer X-Git-Tag: v8.0.0571 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a364cdb648ae009fa7aa05382f5659335683d349;p=vim patch 8.0.0571: negative line number when using :z^ in an empty buffer 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. --- diff --git a/src/ex_cmds.c b/src/ex_cmds.c index 4b0bdef59..309474ce0 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 608a36c49..6e03b0bff 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 c16976584..81b98c11f 100644 --- a/src/version.c +++ b/src/version.c @@ -764,6 +764,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 571, /**/ 570, /**/