0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 8.0.0542: getpos() can return a negative line number

Problem:    getpos() can return a negative line number. (haya14busa)
Solution:   Handle a zero topline and botline. (closes #1613)
This commit is contained in:
Bram Moolenaar
2017-04-03 22:02:55 +02:00
parent 04000560ca
commit a1d5fa65bc
3 changed files with 11 additions and 4 deletions

View File

@@ -5413,8 +5413,10 @@ line({expr}) The result is a Number, which is the line number of the file
$ the last line in the current buffer $ the last line in the current buffer
'x position of mark x (if the mark is not set, 0 is 'x position of mark x (if the mark is not set, 0 is
returned) returned)
w0 first line visible in current window w0 first line visible in current window (one if the
w$ last line visible in current window display isn't updated, e.g. in silent Ex mode)
w$ last line visible in current window (this is one
less than "w0" if no lines are visible)
v In Visual mode: the start of the Visual area (the v In Visual mode: the start of the Visual area (the
cursor is the end). When not in Visual mode cursor is the end). When not in Visual mode
returns the cursor position. Differs from |'<| in returns the cursor position. Differs from |'<| in

View File

@@ -6120,13 +6120,16 @@ var2fpos(
if (name[1] == '0') /* "w0": first visible line */ if (name[1] == '0') /* "w0": first visible line */
{ {
update_topline(); update_topline();
pos.lnum = curwin->w_topline; /* In silent Ex mode topline is zero, but that's not a valid line
* number; use one instead. */
pos.lnum = curwin->w_topline > 0 ? curwin->w_topline : 1;
return &pos; return &pos;
} }
else if (name[1] == '$') /* "w$": last visible line */ else if (name[1] == '$') /* "w$": last visible line */
{ {
validate_botline(); validate_botline();
pos.lnum = curwin->w_botline - 1; /* In silent Ex mode botline is zero, return zero then. */
pos.lnum = curwin->w_botline > 0 ? curwin->w_botline - 1 : 0;
return &pos; return &pos;
} }
} }

View File

@@ -764,6 +764,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
542,
/**/ /**/
541, 541,
/**/ /**/