patch 9.0.1992: [security] segfault in exmode

Problem:  segfault in exmode when redrawing
Solution: skip gui_scroll when exmode_active

Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Christian Brabandt
2023-10-05 22:08:30 +02:00
parent 290b887e8c
commit 20d161ace3
4 changed files with 15 additions and 0 deletions

View File

@ -4397,6 +4397,7 @@ gui_do_scrollbar(
* Scroll a window according to the values set in the globals
* "current_scrollbar" and "scrollbar_value".
* Return TRUE if the cursor in the current window moved or FALSE otherwise.
* may eventually cause a redraw using updateWindow
*/
int
gui_do_scroll(void)
@ -4416,6 +4417,9 @@ gui_do_scroll(void)
if (wp == NULL)
// Couldn't find window
return FALSE;
// don't redraw, LineOffset and similar are not valid!
if (exmode_active)
return FALSE;
/*
* Compute number of lines to scroll. If zero, nothing to do.

View File

@ -0,0 +1,2 @@
" this goes to insert mode and presses key k_VerScrollbar which may cause a redraw in exmode, which used ot crash Vim
norm o<><6F>X

View File

@ -72,6 +72,12 @@ func Test_crash1()
\ ' || echo "crash 8: [OK]" >> X_crash1_result.txt' .. "\<cr>")
call TermWait(buf, 3000)
let file = 'crash/crash_scrollbar'
let args = printf(cmn_args, vim, file)
call term_sendkeys(buf, args ..
\ ' && echo "crash 9: [OK]" >> X_crash1_result.txt' .. "\<cr>")
call TermWait(buf, 1000)
" clean up
exe buf .. "bw!"
@ -86,6 +92,7 @@ func Test_crash1()
\ 'crash 6: [OK]',
\ 'crash 7: [OK]',
\ 'crash 8: [OK]',
\ 'crash 9: [OK]',
\ ]
call assert_equal(expected, getline(1, '$'))

View File

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