Skip to content

Commit

Permalink
patch 9.0.0598: using negative array index with negative width window
Browse files Browse the repository at this point in the history
Problem:    Using negative array index with negative width window.
Solution:   Make sure the window width does not become negative.
  • Loading branch information
brammool committed Sep 26, 2022
1 parent 3bdef10 commit 8279af5
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 1 deletion.
22 changes: 22 additions & 0 deletions src/testdir/test_cmdwin.vim
Expand Up @@ -404,5 +404,27 @@ func Test_cmdwin_freed_buffer_ptr()
bwipe!
endfunc

" This was resulting in a window with negative width.
" The test doesn't reproduce the illegal memory access though...
func Test_cmdwin_split_often()
let lines = &lines
let columns = &columns
set t_WS=

try
set encoding=iso8859
set ruler
winsize 0 0
noremap 0 H
sil norm 0000000q:
catch /E36:/
endtry

bwipe!
set encoding=utf8
let &lines = lines
let &columns = columns
endfunc


" vim: shiftwidth=2 sts=2 expandtab
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -699,6 +699,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
598,
/**/
597,
/**/
Expand Down
5 changes: 4 additions & 1 deletion src/window.c
Expand Up @@ -2089,6 +2089,8 @@ win_equal_rec(
if (hnc) // add next_curwin size
{
next_curwin_size -= p_wiw - (m - n);
if (next_curwin_size < 0)
next_curwin_size = 0;
new_size += next_curwin_size;
room -= new_size - next_curwin_size;
}
Expand Down Expand Up @@ -6611,7 +6613,8 @@ scroll_to_fraction(win_T *wp, int prev_height)
void
win_new_width(win_T *wp, int width)
{
wp->w_width = width;
// Should we give an error if width < 0?
wp->w_width = width < 0 ? 0 : width;
wp->w_lines_valid = 0;
changed_line_abv_curs_win(wp);
// Handled in win_fix_scroll()
Expand Down

0 comments on commit 8279af5

Please sign in to comment.