0
0
mirror of https://github.com/vim/vim.git synced 2025-10-05 05:34:07 -04:00

patch 8.2.2198: ml_get error when resizing window and using text property

Problem:    ml_get error when resizing window and using text property.
Solution:   Validate botline of the right window. (closes #7528)
This commit is contained in:
Bram Moolenaar
2020-12-23 14:36:00 +01:00
parent 4072ba571b
commit 23999d799c
5 changed files with 37 additions and 3 deletions

View File

@@ -541,6 +541,8 @@ set_topline(win_T *wp, linenr_T lnum)
#endif #endif
// Approximate the value of w_botline // Approximate the value of w_botline
wp->w_botline += lnum - wp->w_topline; wp->w_botline += lnum - wp->w_topline;
if (wp->w_botline > wp->w_buffer->b_ml.ml_line_count + 1)
wp->w_botline = wp->w_buffer->b_ml.ml_line_count + 1;
wp->w_topline = lnum; wp->w_topline = lnum;
wp->w_topline_was_set = TRUE; wp->w_topline_was_set = TRUE;
#ifdef FEAT_DIFF #ifdef FEAT_DIFF
@@ -595,8 +597,17 @@ changed_line_abv_curs_win(win_T *wp)
void void
validate_botline(void) validate_botline(void)
{ {
if (!(curwin->w_valid & VALID_BOTLINE)) validate_botline_win(curwin);
comp_botline(curwin); }
/*
* Make sure the value of wp->w_botline is valid.
*/
void
validate_botline_win(win_T *wp)
{
if (!(wp->w_valid & VALID_BOTLINE))
comp_botline(wp);
} }
/* /*

View File

@@ -13,6 +13,7 @@ void changed_cline_bef_curs_win(win_T *wp);
void changed_line_abv_curs(void); void changed_line_abv_curs(void);
void changed_line_abv_curs_win(win_T *wp); void changed_line_abv_curs_win(win_T *wp);
void validate_botline(void); void validate_botline(void);
void validate_botline_win(win_T *wp);
void invalidate_botline(void); void invalidate_botline(void);
void invalidate_botline_win(win_T *wp); void invalidate_botline_win(win_T *wp);
void approximate_botline_win(win_T *wp); void approximate_botline_win(win_T *wp);

View File

@@ -1358,4 +1358,24 @@ func Test_prop_block_insert()
call prop_type_delete('test') call prop_type_delete('test')
endfunc endfunc
" this was causing an ml_get error because w_botline was wrong
func Test_prop_one_line_window()
enew
call range(2)->setline(1)
call prop_type_add('testprop', {})
call prop_add(1, 1, {'type': 'testprop'})
call popup_create('popup', {'textprop': 'testprop'})
$
new
wincmd _
call feedkeys("\r", 'xt')
redraw
call popup_clear()
call prop_type_delete('testprop')
close
bwipe!
endfunc
" vim: shiftwidth=2 sts=2 expandtab " vim: shiftwidth=2 sts=2 expandtab

View File

@@ -419,7 +419,7 @@ find_visible_prop(win_T *wp, int type_id, int id, textprop_T *prop,
int i; int i;
// w_botline may not have been updated yet. // w_botline may not have been updated yet.
validate_botline(); validate_botline_win(wp);
for (lnum = wp->w_topline; lnum < wp->w_botline; ++lnum) for (lnum = wp->w_topline; lnum < wp->w_botline; ++lnum)
{ {
count = get_text_props(wp->w_buffer, lnum, &props, FALSE); count = get_text_props(wp->w_buffer, lnum, &props, FALSE);

View File

@@ -750,6 +750,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 */
/**/
2198,
/**/ /**/
2197, 2197,
/**/ /**/