diff options
author | Bram Moolenaar <Bram@vim.org> | 2011-12-08 15:09:52 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2011-12-08 15:09:52 +0100 |
commit | f0b6b0cc3bc227a33beb4378308e8150f06270b2 (patch) | |
tree | 8172f67f1a2e4e4914219d33b6fe96882e6215da /src/mbyte.c | |
parent | 2bbafdbcee74daded585de769cede94e8ea7d00c (diff) | |
download | vim-git-f0b6b0cc3bc227a33beb4378308e8150f06270b2.tar.gz |
updated for version 7.3.365v7.3.365
Problem: Crash when using a large Unicode character in a file that has
syntax highlighting. (ngollan)
Solution: Check for going past the end of the utf tables. (Dominique Pelle)
Diffstat (limited to 'src/mbyte.c')
-rw-r--r-- | src/mbyte.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/mbyte.c b/src/mbyte.c index da97b346f..2a202f340 100644 --- a/src/mbyte.c +++ b/src/mbyte.c @@ -2764,19 +2764,22 @@ utf_convert(a, table, tableSize) int tableSize; { int start, mid, end; /* indices into table */ + int entries = tableSize / sizeof(convertStruct); start = 0; - end = tableSize / sizeof(convertStruct); + end = entries; while (start < end) { /* need to search further */ - mid = (end + start) /2; + mid = (end + start) / 2; if (table[mid].rangeEnd < a) start = mid + 1; else end = mid; } - if (table[start].rangeStart <= a && a <= table[start].rangeEnd + if (start < entries + && table[start].rangeStart <= a + && a <= table[start].rangeEnd && (a - table[start].rangeStart) % table[start].step == 0) return (a + table[start].offset); else @@ -2791,7 +2794,7 @@ utf_convert(a, table, tableSize) utf_fold(a) int a; { - return utf_convert(a, foldCase, sizeof(foldCase)); + return utf_convert(a, foldCase, (int)sizeof(foldCase)); } static convertStruct toLower[] = @@ -3119,7 +3122,7 @@ utf_toupper(a) return TOUPPER_LOC(a); /* For any other characters use the above mapping table. */ - return utf_convert(a, toUpper, sizeof(toUpper)); + return utf_convert(a, toUpper, (int)sizeof(toUpper)); } int @@ -3152,7 +3155,7 @@ utf_tolower(a) return TOLOWER_LOC(a); /* For any other characters use the above mapping table. */ - return utf_convert(a, toLower, sizeof(toLower)); + return utf_convert(a, toLower, (int)sizeof(toLower)); } int |