diff options
author | fkm3 <frederickmayle@gmail.com> | 2022-06-09 08:05:36 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-09 08:05:36 -0700 |
commit | bf327368d8981b2d974908188a72f2b51b2f8e85 (patch) | |
tree | a26d50dc4b4bf966178b364ee0504f995ccd7176 /src/nvim/diff.c | |
parent | 11e0fea8bafaf7693531177c4ebaf733738241f1 (diff) | |
download | rneovim-bf327368d8981b2d974908188a72f2b51b2f8e85.tar.gz rneovim-bf327368d8981b2d974908188a72f2b51b2f8e85.tar.bz2 rneovim-bf327368d8981b2d974908188a72f2b51b2f8e85.zip |
fix: segfault in find_tagfunc_tags #18841
fixes #15221
I tried to reproduce with a test, but failed. The below patch is able to
cause the out of bound access (I verified by adding a check to the
code), but it doesn't seg fault or trigger asan/valgrind errors.
```
diff --git a/src/nvim/testdir/test_tagfunc.vim b/src/nvim/testdir/test_tagfunc.vim
index ffc1d63b9..22828a39f 100644
--- a/src/nvim/testdir/test_tagfunc.vim
+++ b/src/nvim/testdir/test_tagfunc.vim
@@ -117,4 +117,26 @@ func Test_tagfunc_settagstack()
delfunc Mytagfunc2
endfunc
+func Test_tagfunc_settagstack_many()
+
+ func Mytagfunc1(pat, flags, info)
+ return [{'name' : 'mytag', 'filename' : 'Xtest', 'cmd' : '1'}]
+ endfunc
+ set tagfunc=Mytagfunc1
+ call writefile([''], 'Xtest')
+
+ for i in range(0,20)
+ let pos = [bufnr()] + getcurpos()[1:]
+ let newtag = [{'tagname' : 'mytag' + i, 'from' : pos}]
+ call settagstack(1, {'items' : newtag}, 'a')
+ call settagstack(1, {'curidx' : 21})
+ endfor
+
+ tag
+
+ call delete('Xtest')
+ set tagfunc&
+ delfunc Mytagfunc1
+endfunc
```
Diffstat (limited to 'src/nvim/diff.c')
0 files changed, 0 insertions, 0 deletions