aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorerw7 <erw7.github@gmail.com>2020-08-01 01:52:15 +0900
committererw7 <erw7.github@gmail.com>2020-08-02 22:33:18 +0900
commit872ecf65d10f0d22bbf3e2257f9ae89a6c61d2f4 (patch)
treebf1c44a2bd8c44be2114e00b8411971cb5ab6306
parent1153ac9036ab62ee25078248a01dc56a2311b9a6 (diff)
downloadrneovim-872ecf65d10f0d22bbf3e2257f9ae89a6c61d2f4.tar.gz
rneovim-872ecf65d10f0d22bbf3e2257f9ae89a6c61d2f4.tar.bz2
rneovim-872ecf65d10f0d22bbf3e2257f9ae89a6c61d2f4.zip
ui: fix problem with sattr_T overflow
sattr_T was defined as uint16_t. But this is not enough to handle the 24-bit colors of the terminal. To solve this problem, change it to int. In 32bit, int may overflow. So, if it overflows, change it to ignore it without adding more attr_entries. fixes #12366
-rw-r--r--src/nvim/grid_defs.h2
-rw-r--r--src/nvim/highlight.c7
2 files changed, 7 insertions, 2 deletions
diff --git a/src/nvim/grid_defs.h b/src/nvim/grid_defs.h
index c6687c8da9..e14aae73d8 100644
--- a/src/nvim/grid_defs.h
+++ b/src/nvim/grid_defs.h
@@ -11,7 +11,7 @@
// The characters and attributes drawn on grids.
typedef char_u schar_T[(MAX_MCO+1) * 4 + 1];
-typedef int16_t sattr_T;
+typedef int sattr_T;
/// ScreenGrid represents a resizable rectuangular grid displayed by UI clients.
///
diff --git a/src/nvim/highlight.c b/src/nvim/highlight.c
index c0cae54572..262afba07a 100644
--- a/src/nvim/highlight.c
+++ b/src/nvim/highlight.c
@@ -90,7 +90,12 @@ static int get_attr_entry(HlEntry entry)
}
}
- id = (int)kv_size(attr_entries);
+ size_t next_id = kv_size(attr_entries);
+ if (next_id > INT_MAX) {
+ ELOG("The index on attr_entries has overflowed");
+ return 0;
+ }
+ id = (int)next_id;
kv_push(attr_entries, entry);
map_put(HlEntry, int)(attr_entry_ids, entry, id);