]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.365 v7.3.365
authorBram Moolenaar <Bram@vim.org>
Thu, 8 Dec 2011 14:09:52 +0000 (15:09 +0100)
committerBram Moolenaar <Bram@vim.org>
Thu, 8 Dec 2011 14:09:52 +0000 (15:09 +0100)
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)

src/mbyte.c
src/version.c

index da97b346f46fb76263ace3a3a9c3231b72c726d1..2a202f340843f002be229ccb0133c9baeeca14ee 100644 (file)
@@ -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
index 6e30bf959ff2b32a4dad22a14651d7df67e6b93f..3cb219504f5aa94db00f00f75065ebf67a3a49be 100644 (file)
@@ -714,6 +714,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    365,
 /**/
     364,
 /**/