mirror of
https://github.com/vim/vim.git
synced 2025-09-29 04:34:16 -04:00
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:
@@ -4397,6 +4397,7 @@ gui_do_scrollbar(
|
|||||||
* Scroll a window according to the values set in the globals
|
* Scroll a window according to the values set in the globals
|
||||||
* "current_scrollbar" and "scrollbar_value".
|
* "current_scrollbar" and "scrollbar_value".
|
||||||
* Return TRUE if the cursor in the current window moved or FALSE otherwise.
|
* Return TRUE if the cursor in the current window moved or FALSE otherwise.
|
||||||
|
* may eventually cause a redraw using updateWindow
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
gui_do_scroll(void)
|
gui_do_scroll(void)
|
||||||
@@ -4416,6 +4417,9 @@ gui_do_scroll(void)
|
|||||||
if (wp == NULL)
|
if (wp == NULL)
|
||||||
// Couldn't find window
|
// Couldn't find window
|
||||||
return FALSE;
|
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.
|
* Compute number of lines to scroll. If zero, nothing to do.
|
||||||
|
2
src/testdir/crash/crash_scrollbar
Normal file
2
src/testdir/crash/crash_scrollbar
Normal 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
|
@@ -72,6 +72,12 @@ func Test_crash1()
|
|||||||
\ ' || echo "crash 8: [OK]" >> X_crash1_result.txt' .. "\<cr>")
|
\ ' || echo "crash 8: [OK]" >> X_crash1_result.txt' .. "\<cr>")
|
||||||
call TermWait(buf, 3000)
|
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
|
" clean up
|
||||||
exe buf .. "bw!"
|
exe buf .. "bw!"
|
||||||
|
|
||||||
@@ -86,6 +92,7 @@ func Test_crash1()
|
|||||||
\ 'crash 6: [OK]',
|
\ 'crash 6: [OK]',
|
||||||
\ 'crash 7: [OK]',
|
\ 'crash 7: [OK]',
|
||||||
\ 'crash 8: [OK]',
|
\ 'crash 8: [OK]',
|
||||||
|
\ 'crash 9: [OK]',
|
||||||
\ ]
|
\ ]
|
||||||
|
|
||||||
call assert_equal(expected, getline(1, '$'))
|
call assert_equal(expected, getline(1, '$'))
|
||||||
|
@@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1992,
|
||||||
/**/
|
/**/
|
||||||
1991,
|
1991,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user