summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-12-23 14:36:00 +0100
committerBram Moolenaar <Bram@vim.org>2020-12-23 14:36:00 +0100
commit23999d799cfe844b604f193183f8f84052c8e746 (patch)
tree35d073cb39859acd906c9ac1c9fee90c251b2299
parent4072ba571babd733d1800c082416fe8fe3c28ed7 (diff)
downloadvim-git-8.2.2198.tar.gz
patch 8.2.2198: ml_get error when resizing window and using text propertyv8.2.2198
Problem: ml_get error when resizing window and using text property. Solution: Validate botline of the right window. (closes #7528)
-rw-r--r--src/move.c15
-rw-r--r--src/proto/move.pro1
-rw-r--r--src/testdir/test_textprop.vim20
-rw-r--r--src/textprop.c2
-rw-r--r--src/version.c2
5 files changed, 37 insertions, 3 deletions
diff --git a/src/move.c b/src/move.c
index 69091fd3d..aa90b528a 100644
--- 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
index 8efecb9f2..d78623acc 100644
--- a/src/proto/move.pro
+++ b/src/proto/move.pro
@@ -13,6 +13,7 @@ void changed_cline_bef_curs_win(win_T *wp);
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
index 072056759..a4033fa48 100644
--- 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
index 5a18f6c73..b6cae70a8 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -419,7 +419,7 @@ find_visible_prop(win_T *wp, int type_id, int id, textprop_T *prop,
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
index 493194f95..af89c9e30 100644
--- 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,