aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorerw7 <erw7.github@gmail.com>2020-07-29 04:36:17 +0900
committerGitHub <noreply@github.com>2020-07-29 04:36:17 +0900
commit5f5bd576e5395ef0cd6198f16d10edc1ff4bbe76 (patch)
treecc4551d4868461f82bbb37130fb32ab0fda1fb6c /src
parent33eaa171fad0c8b729b0db14eef3173dbd8c950b (diff)
parentb6b270b28fa92d5bedca397313b5370893fe0e3f (diff)
downloadrneovim-5f5bd576e5395ef0cd6198f16d10edc1ff4bbe76.tar.gz
rneovim-5f5bd576e5395ef0cd6198f16d10edc1ff4bbe76.tar.bz2
rneovim-5f5bd576e5395ef0cd6198f16d10edc1ff4bbe76.zip
Merge pull request #12687 from erw7/fix-terminal-overflow
terminal: fix terminal attribute overflow
Diffstat (limited to 'src')
-rw-r--r--src/nvim/screen.c6
-rw-r--r--src/nvim/screen.h3
-rw-r--r--src/nvim/terminal.c1
3 files changed, 7 insertions, 3 deletions
diff --git a/src/nvim/screen.c b/src/nvim/screen.c
index ba52f5b489..7bed747e9a 100644
--- a/src/nvim/screen.c
+++ b/src/nvim/screen.c
@@ -2804,8 +2804,8 @@ win_line (
off += col;
}
- // wont highlight after 1024 columns
- int term_attrs[1024] = {0};
+ // wont highlight after TERM_ATTRS_MAX columns
+ int term_attrs[TERM_ATTRS_MAX] = { 0 };
if (wp->w_buffer->terminal) {
terminal_get_line_attributes(wp->w_buffer->terminal, wp, lnum, term_attrs);
extra_check = true;
@@ -4172,7 +4172,7 @@ win_line (
int n = wp->w_p_rl ? -1 : 1;
while (col >= 0 && col < grid->Columns) {
schar_from_ascii(linebuf_char[off], ' ');
- linebuf_attr[off] = term_attrs[vcol];
+ linebuf_attr[off] = vcol >= TERM_ATTRS_MAX ? 0 : term_attrs[vcol];
off += n;
vcol += n;
col += n;
diff --git a/src/nvim/screen.h b/src/nvim/screen.h
index 9267672cf1..5f339b9ae2 100644
--- a/src/nvim/screen.h
+++ b/src/nvim/screen.h
@@ -32,6 +32,9 @@ EXTERN ScreenGrid default_grid INIT(= SCREEN_GRID_INIT);
#define DEFAULT_GRID_HANDLE 1 // handle for the default_grid
+// Maximum columns for terminal highlight attributes
+#define TERM_ATTRS_MAX 1024
+
/// Status line click definition
typedef struct {
enum {
diff --git a/src/nvim/terminal.c b/src/nvim/terminal.c
index 6a13341a89..52d3eef810 100644
--- a/src/nvim/terminal.c
+++ b/src/nvim/terminal.c
@@ -607,6 +607,7 @@ void terminal_get_line_attributes(Terminal *term, win_T *wp, int linenr,
return;
}
+ width = MIN(TERM_ATTRS_MAX, width);
for (int col = 0; col < width; col++) {
VTermScreenCell cell;
bool color_valid = fetch_cell(term, row, col, &cell);