aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJurica Bradaric <jbradaric@gmail.com>2016-08-28 13:42:18 +0200
committerJurica Bradaric <jbradaric@gmail.com>2016-10-07 17:07:17 +0200
commit61024fb4a84467d0b09076a537c6c8a9a75ae45a (patch)
treecba1d0323e43801e9caf259dfa466f260d88ecae /src
parent50bd8297e67814b3ddbf0f274314fd2d321f63b6 (diff)
downloadrneovim-61024fb4a84467d0b09076a537c6c8a9a75ae45a.tar.gz
rneovim-61024fb4a84467d0b09076a537c6c8a9a75ae45a.tar.bz2
rneovim-61024fb4a84467d0b09076a537c6c8a9a75ae45a.zip
eval: Exit early if argument is invalid.
Diffstat (limited to 'src')
-rw-r--r--src/nvim/eval.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index f077458c9b..a8b6a3ac95 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -7713,10 +7713,20 @@ static void f_bufnr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
static void buf_win_common(typval_T *argvars, typval_T *rettv, bool get_nr)
{
- (void)get_tv_number(&argvars[0]); // issue errmsg if type error
+ int error = false;
+ (void)get_tv_number_chk(&argvars[0], &error); // issue errmsg if type error
+ if (error) { // the argument has an invalid type
+ rettv->vval.v_number = -1;
+ return;
+ }
+
emsg_off++;
+ buf_T *buf = get_buf_tv(&argvars[0], true);
+ if (buf == NULL) { // no need to search if buffer was not found
+ rettv->vval.v_number = -1;
+ goto end;
+ }
- buf_T *buf = get_buf_tv(&argvars[0], TRUE);
int winnr = 0;
int winid;
bool found_buf = false;
@@ -7729,6 +7739,7 @@ static void buf_win_common(typval_T *argvars, typval_T *rettv, bool get_nr)
}
}
rettv->vval.v_number = (found_buf ? (get_nr ? winnr : winid) : -1);
+end:
emsg_off--;
}