diff options
author | Jurica Bradaric <jbradaric@gmail.com> | 2016-08-28 13:42:18 +0200 |
---|---|---|
committer | Jurica Bradaric <jbradaric@gmail.com> | 2016-10-07 17:07:17 +0200 |
commit | 61024fb4a84467d0b09076a537c6c8a9a75ae45a (patch) | |
tree | cba1d0323e43801e9caf259dfa466f260d88ecae /src | |
parent | 50bd8297e67814b3ddbf0f274314fd2d321f63b6 (diff) | |
download | rneovim-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.c | 15 |
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--; } |