mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 9.0.1840: [security] use-after-free in do_ecmd
Problem: use-after-free in do_ecmd Solution: Verify oldwin pointer after reset_VIsual() Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
parent
acb91d3905
commit
e1dc9a6275
@ -2646,12 +2646,18 @@ do_ecmd(
|
||||
goto theend;
|
||||
}
|
||||
|
||||
/*
|
||||
* End Visual mode before switching to another buffer, so the text can be
|
||||
* copied into the GUI selection buffer.
|
||||
*/
|
||||
|
||||
// End Visual mode before switching to another buffer, so the text can be
|
||||
// copied into the GUI selection buffer.
|
||||
// Careful: may trigger ModeChanged() autocommand
|
||||
|
||||
// Should we block autocommands here?
|
||||
reset_VIsual();
|
||||
|
||||
// autocommands freed window :(
|
||||
if (oldwin != NULL && !win_valid(oldwin))
|
||||
oldwin = NULL;
|
||||
|
||||
#if defined(FEAT_EVAL)
|
||||
if ((command != NULL || newlnum > (linenr_T)0)
|
||||
&& *get_vim_var_str(VV_SWAPCOMMAND) == NUL)
|
||||
|
@ -105,6 +105,7 @@ NEW_TESTS = \
|
||||
test_conceal \
|
||||
test_const \
|
||||
test_cpoptions \
|
||||
test_crash \
|
||||
test_crypt \
|
||||
test_cscope \
|
||||
test_cursor_func \
|
||||
@ -369,6 +370,7 @@ NEW_TESTS_RES = \
|
||||
test_conceal.res \
|
||||
test_const.res \
|
||||
test_cpoptions.res \
|
||||
test_crash.res \
|
||||
test_crypt.res \
|
||||
test_cscope.res \
|
||||
test_cursor_func.res \
|
||||
|
BIN
src/testdir/crash/poc_huaf1
Normal file
BIN
src/testdir/crash/poc_huaf1
Normal file
Binary file not shown.
BIN
src/testdir/crash/poc_huaf2
Normal file
BIN
src/testdir/crash/poc_huaf2
Normal file
Binary file not shown.
BIN
src/testdir/crash/poc_huaf3
Normal file
BIN
src/testdir/crash/poc_huaf3
Normal file
Binary file not shown.
20
src/testdir/dumps/Test_crash_01.dump
Normal file
20
src/testdir/dumps/Test_crash_01.dump
Normal file
@ -0,0 +1,20 @@
|
||||
> +0&#ffffff0@74
|
||||
@75
|
||||
@75
|
||||
@75
|
||||
@75
|
||||
@75
|
||||
@75
|
||||
@75
|
||||
@75
|
||||
@75
|
||||
@75
|
||||
@75
|
||||
@75
|
||||
@75
|
||||
@75
|
||||
@75
|
||||
@75
|
||||
@75
|
||||
@75
|
||||
@75
|
25
src/testdir/test_crash.vim
Normal file
25
src/testdir/test_crash.vim
Normal file
@ -0,0 +1,25 @@
|
||||
" Some tests, that used to crash Vim
|
||||
source check.vim
|
||||
source screendump.vim
|
||||
|
||||
CheckScreendump
|
||||
|
||||
func Test_crash1()
|
||||
" The following used to crash Vim
|
||||
let opts = #{wait_for_ruler: 0}
|
||||
let args = ' -u NONE -i NONE -n -e -s -S '
|
||||
let buf = RunVimInTerminal(args .. ' crash/poc_huaf1', opts)
|
||||
call VerifyScreenDump(buf, 'Test_crash_01', {})
|
||||
exe buf .. "bw!"
|
||||
|
||||
let buf = RunVimInTerminal(args .. ' crash/poc_huaf2', opts)
|
||||
call VerifyScreenDump(buf, 'Test_crash_01', {})
|
||||
exe buf .. "bw!"
|
||||
|
||||
let buf = RunVimInTerminal(args .. ' crash/poc_huaf3', opts)
|
||||
call VerifyScreenDump(buf, 'Test_crash_01', {})
|
||||
exe buf .. "bw!"
|
||||
|
||||
endfunc
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
@ -699,6 +699,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1840,
|
||||
/**/
|
||||
1839,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user