summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-06-08 17:25:33 +0200
committerBram Moolenaar <Bram@vim.org>2019-06-08 17:25:33 +0200
commitaef5c62a6fff7654bb8df7b9359e811f7a6e428f (patch)
tree1877a888117e33a680c442d859635184f332ce96
parentacc682bd7ca66b74b42de7a5fb5d3ef37897926f (diff)
downloadvim-git-aef5c62a6fff7654bb8df7b9359e811f7a6e428f.tar.gz
patch 8.1.1497: accessing memory beyond allocated spacev8.1.1497
Problem: Accessing memory beyond allocated space. Solution: Check column before accessing popup mask.
-rw-r--r--src/screen.c41
-rw-r--r--src/version.c2
2 files changed, 25 insertions, 18 deletions
diff --git a/src/screen.c b/src/screen.c
index 512560b88..76d9b3c4b 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -6797,35 +6797,40 @@ screen_line(
if (clear_width > 0
#ifdef FEAT_TEXT_PROP
&& !(flags & SLF_POPUP) // no separator for popup window
- && popup_mask[row * screen_Columns + col + coloff] <= screen_zindex
#endif
)
{
// For a window that has a right neighbor, draw the separator char
- // right of the window contents.
+ // right of the window contents. But not on top of a popup window.
if (coloff + col < Columns)
{
- int c;
-
- c = fillchar_vsep(&hl);
- if (ScreenLines[off_to] != (schar_T)c
- || (enc_utf8 && (int)ScreenLinesUC[off_to]
- != (c >= 0x80 ? c : 0))
- || ScreenAttrs[off_to] != hl)
+#ifdef FEAT_TEXT_PROP
+ if (popup_mask[row * screen_Columns + col + coloff]
+ <= screen_zindex)
+#endif
{
- ScreenLines[off_to] = c;
- ScreenAttrs[off_to] = hl;
- if (enc_utf8)
+ int c;
+
+ c = fillchar_vsep(&hl);
+ if (ScreenLines[off_to] != (schar_T)c
+ || (enc_utf8 && (int)ScreenLinesUC[off_to]
+ != (c >= 0x80 ? c : 0))
+ || ScreenAttrs[off_to] != hl)
{
- if (c >= 0x80)
+ ScreenLines[off_to] = c;
+ ScreenAttrs[off_to] = hl;
+ if (enc_utf8)
{
- ScreenLinesUC[off_to] = c;
- ScreenLinesC[0][off_to] = 0;
+ if (c >= 0x80)
+ {
+ ScreenLinesUC[off_to] = c;
+ ScreenLinesC[0][off_to] = 0;
+ }
+ else
+ ScreenLinesUC[off_to] = 0;
}
- else
- ScreenLinesUC[off_to] = 0;
+ screen_char(off_to, row, col + coloff);
}
- screen_char(off_to, row, col + coloff);
}
}
else
diff --git a/src/version.c b/src/version.c
index 132329f05..8aac5d5f6 100644
--- a/src/version.c
+++ b/src/version.c
@@ -768,6 +768,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1497,
+/**/
1496,
/**/
1495,