patch 9.2.0074: [security]: Crash with overlong emacs tag file

Problem:  Crash with overlong emacs tag file, because of an OOB buffer
          read (ehdgks0627, un3xploitable)
Solution: Check for end of buffer and return early.

Github Advisory:
https://github.com/vim/vim/security/advisories/GHSA-h4mf-vg97-hj8j

Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Christian Brabandt
2026-02-23 18:30:11 +00:00
parent 79348dbbc0
commit f6a7f469a9
3 changed files with 20 additions and 0 deletions
+3
View File
@@ -1901,6 +1901,9 @@ emacs_tags_new_filename(findtags_state_T *st)
for (p = st->ebuf; *p && *p != ','; p++)
;
// invalid
if (*p == NUL)
return;
*p = NUL;
// check for an included tags file.
+15
View File
@@ -301,4 +301,19 @@ func Test_tag_complete_with_overlong_line()
set tags&
endfunc
" This used to crash Vim
func Test_evil_emacs_tagfile()
CheckFeature emacs_tags
let longline = repeat('a', 515)
call writefile([
\ "\x0c",
\ longline
\ ], 'Xtags', 'D')
set tags=Xtags
call assert_fails(':tag a', 'E426:')
set tags&
endfunc
" vim: shiftwidth=2 sts=2 expandtab
+2
View File
@@ -734,6 +734,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
74,
/**/
73,
/**/