From ce7df6759c5f6a19578130c97a6ee322f16d752d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 07:34:48 -0700 Subject: [PATCH] [Backport release-0.7] fix seg fault in find_tagfunc_tags (#19503) fix: fix seg fault in find_tagfunc_tags (cherry picked from commit 187c02cc407bdec5aaa2c5c1ace75b5b68e2b696) Co-authored-by: Frederick Mayle --- src/nvim/tag.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/nvim/tag.c b/src/nvim/tag.c index 32d72218c8..92490e9df0 100644 --- a/src/nvim/tag.c +++ b/src/nvim/tag.c @@ -1150,7 +1150,15 @@ static int find_tagfunc_tags(char_u *pat, garray_T *ga, int *match_count, int fl typval_T args[4]; typval_T rettv; char_u flagString[4]; - taggy_T *tag = &curwin->w_tagstack[curwin->w_tagstackidx]; + taggy_T *tag = NULL; + + if (curwin->w_tagstacklen > 0) { + if (curwin->w_tagstackidx == curwin->w_tagstacklen) { + tag = &curwin->w_tagstack[curwin->w_tagstackidx - 1]; + } else { + tag = &curwin->w_tagstack[curwin->w_tagstackidx]; + } + } if (*curbuf->b_p_tfu == NUL) { return FAIL; @@ -1163,7 +1171,7 @@ static int find_tagfunc_tags(char_u *pat, garray_T *ga, int *match_count, int fl // create 'info' dict argument dict_T *const d = tv_dict_alloc_lock(VAR_FIXED); - if (tag->user_data != NULL) { + if (tag != NULL && tag->user_data != NULL) { tv_dict_add_str(d, S_LEN("user_data"), (const char *)tag->user_data); } if (buf_ffname != NULL) {