diff options
author | Andy K. Massimino <f8a663@normed.space> | 2021-03-21 12:06:23 -0400 |
---|---|---|
committer | Andy K. Massimino <f8a663@normed.space> | 2021-03-21 12:06:23 -0400 |
commit | e25ebf6b4f1342719b77ced3cc79c113f3dcb41e (patch) | |
tree | 29780a02a756d722c23496734115526868530003 /src | |
parent | 6519b184716adcffa72e9ad87f6ae6d0d40f5e9f (diff) | |
download | rneovim-e25ebf6b4f1342719b77ced3cc79c113f3dcb41e.tar.gz rneovim-e25ebf6b4f1342719b77ced3cc79c113f3dcb41e.tar.bz2 rneovim-e25ebf6b4f1342719b77ced3cc79c113f3dcb41e.zip |
Fix neovim tag bugs uncovered by vim-8.2.0088,
but not related to the patch. Specifically:
- settagstack()'s e_listreq is in the wrong place
- in :ltag, vim_strncpy -> xstrlcpy length parameter is different
xstrlcpy's length includes the null terminator (so add one)
- in :ltag, STRNCAT -> xstrlcat takes dest size, not number to copy
use snprintf instead
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/eval/funcs.c | 2 | ||||
-rw-r--r-- | src/nvim/tag.c | 6 |
2 files changed, 4 insertions, 4 deletions
diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c index 9edf5c8f7e..5f08b53e50 100644 --- a/src/nvim/eval/funcs.c +++ b/src/nvim/eval/funcs.c @@ -8809,8 +8809,6 @@ static void f_settagstack(typval_T *argvars, typval_T *rettv, FunPtr fptr) if (set_tagstack(wp, d, action) == OK) { rettv->vval.v_number = 0; - } else { - EMSG(_(e_listreq)); } } diff --git a/src/nvim/tag.c b/src/nvim/tag.c index aa0e93a0d5..f7a55e7a55 100644 --- a/src/nvim/tag.c +++ b/src/nvim/tag.c @@ -908,7 +908,7 @@ add_llist_tags( if (len > 128) { len = 128; } - xstrlcpy((char *)tag_name, (const char *)tagp.tagname, len); + xstrlcpy((char *)tag_name, (const char *)tagp.tagname, len + 1); tag_name[len] = NUL; // Save the tag file name @@ -975,7 +975,8 @@ add_llist_tags( if (cmd_len > (CMDBUFFSIZE - 5)) { cmd_len = CMDBUFFSIZE - 5; } - xstrlcat((char *)cmd, (char *)cmd_start, cmd_len); + snprintf((char *)cmd + len, CMDBUFFSIZE + 1 - len, + "%.*s", cmd_len, cmd_start); len += cmd_len; if (cmd[len - 1] == '$') { @@ -3406,6 +3407,7 @@ int set_tagstack(win_T *wp, const dict_T *d, int action) if ((di = tv_dict_find(d, "items", -1)) != NULL) { if (di->di_tv.v_type != VAR_LIST) { + EMSG(_(e_listreq)); return FAIL; } l = di->di_tv.vval.v_list; |