patch 9.1.1172: [security]: overflow with 'nostartofline' and Ex command in tag file

Problem:  heap-buffer-overflow with 'nostartofline' and Ex command in
          tag file.
Solution: Set cursor column when moving cursor to line 1 (zeertzjq).

closes: #16796

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
zeertzjq
2025-03-05 20:05:18 +01:00
committed by Christian Brabandt
parent a95085e0fc
commit 3ed6659549
3 changed files with 21 additions and 0 deletions

View File

@ -3997,6 +3997,8 @@ jumpto_tag(
++sandbox;
#endif
curwin->w_cursor.lnum = 1; // start command in line 1
curwin->w_cursor.col = 0;
curwin->w_cursor.coladd = 0;
do_cmdline_cmd(pbuf);
retval = OK;

View File

@ -1633,4 +1633,21 @@ func Test_tag_guess_short()
set tags& cpoptions-=t
endfunc
func Test_tag_excmd_with_nostartofline()
call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//",
\ "f\tXfile\tascii"],
\ 'Xtags', 'D')
call writefile(['f', 'foobar'], 'Xfile', 'D')
set nostartofline
new Xfile
setlocal tags=Xtags
normal! G$
" This used to cause heap-buffer-overflow
tag f
bwipe!
set startofline&
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1172,
/**/
1171,
/**/