1
0
forked from aniani/vim

patch 9.1.1066: heap-use-after-free and stack-use-after-scope with :14verbose

Problem:  heap-use-after-free and stack-use-after-scope with :14verbose
          when using :return and :try (after 9.1.1063).
Solution: Move back the vim_free(tofree) and the scope of numbuf[].
          (zeertzjq)

closes: #16563

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
zeertzjq
2025-02-02 08:55:57 +01:00
committed by Christian Brabandt
parent 3a621188ee
commit 2101230f40
3 changed files with 42 additions and 11 deletions

View File

@@ -987,4 +987,36 @@ func Test_func_curly_brace_invalid_name()
delfunc Fail
endfunc
func Test_func_return_in_try_verbose()
func TryReturnList()
try
return [1, 2, 3]
endtry
endfunc
func TryReturnNumber()
try
return 123
endtry
endfunc
func TryReturnOverlongString()
try
return repeat('a', 9999)
endtry
endfunc
" This should not cause heap-use-after-free
call assert_match('\n:return \[1, 2, 3\] made pending\n',
\ execute('14verbose call TryReturnList()'))
" This should not cause stack-use-after-scope
call assert_match('\n:return 123 made pending\n',
\ execute('14verbose call TryReturnNumber()'))
" An overlong string is truncated
call assert_match('\n:return a\{100,}\.\.\.',
\ execute('14verbose call TryReturnOverlongString()'))
delfunc TryReturnList
delfunc TryReturnNumber
delfunc TryReturnOverlongString
endfunc
" vim: shiftwidth=2 sts=2 expandtab