# HG changeset patch # User Bram Moolenaar # Date 1608731104 -3600 # Node ID 90ea5037a7e3d3d9c94954c96e40b8cb6e624fd4 # Parent fab58304f77dc05ca460cb1e9e46878d13d6ee30 patch 8.2.2198: ml_get error when resizing window and using text property Commit: https://github.com/vim/vim/commit/23999d799cfe844b604f193183f8f84052c8e746 Author: Bram Moolenaar Date: Wed Dec 23 14:36:00 2020 +0100 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 https://github.com/vim/vim/issues/7528) diff --git a/src/move.c b/src/move.c --- a/src/move.c +++ b/src/move.c @@ -541,6 +541,8 @@ set_topline(win_T *wp, linenr_T lnum) #endif // Approximate the value of w_botline 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_was_set = TRUE; #ifdef FEAT_DIFF @@ -595,8 +597,17 @@ changed_line_abv_curs_win(win_T *wp) void validate_botline(void) { - if (!(curwin->w_valid & VALID_BOTLINE)) - comp_botline(curwin); + validate_botline_win(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); } /* diff --git a/src/proto/move.pro b/src/proto/move.pro --- a/src/proto/move.pro +++ b/src/proto/move.pro @@ -13,6 +13,7 @@ void changed_cline_bef_curs_win(win_T *w void changed_line_abv_curs(void); void changed_line_abv_curs_win(win_T *wp); void validate_botline(void); +void validate_botline_win(win_T *wp); void invalidate_botline(void); void invalidate_botline_win(win_T *wp); void approximate_botline_win(win_T *wp); diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim --- a/src/testdir/test_textprop.vim +++ b/src/testdir/test_textprop.vim @@ -1358,4 +1358,24 @@ func Test_prop_block_insert() call prop_type_delete('test') 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 diff --git a/src/textprop.c b/src/textprop.c --- a/src/textprop.c +++ b/src/textprop.c @@ -419,7 +419,7 @@ find_visible_prop(win_T *wp, int type_id int i; // w_botline may not have been updated yet. - validate_botline(); + validate_botline_win(wp); for (lnum = wp->w_topline; lnum < wp->w_botline; ++lnum) { count = get_text_props(wp->w_buffer, lnum, &props, FALSE); diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2198, +/**/ 2197, /**/ 2196,