diff options
author | Bram Moolenaar <Bram@vim.org> | 2019-06-08 17:25:33 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2019-06-08 17:25:33 +0200 |
commit | aef5c62a6fff7654bb8df7b9359e811f7a6e428f (patch) | |
tree | 1877a888117e33a680c442d859635184f332ce96 | |
parent | acc682bd7ca66b74b42de7a5fb5d3ef37897926f (diff) | |
download | vim-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.c | 41 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |