Don't buffer overflow when trying to process source bytes with the high bit
authorDavid Given <dg@cowlark.com>
Mon, 11 Mar 2019 13:50:30 +0000 (13:50 +0000)
committerDavid Given <dg@cowlark.com>
Mon, 11 Mar 2019 13:50:30 +0000 (13:50 +0000)
set.

lang/cem/cpp.ansi/class.h

index 5046ddf..4ae5e25 100644 (file)
@@ -10,7 +10,7 @@
        At present such a class number is supposed to fit in 4 bits.
 */
 
-#define        class(ch)       ((tkclass)[(unsigned int)ch])
+#define        class(ch)       ((tkclass)[(unsigned char)ch])
 
 /*     Being the start of a token is, fortunately, a mutual exclusive
        property, so, as there are less than 16 classes they can be
        class.  This is implemented as a collection of tables to speed up
        the decision whether a character has a special meaning.
 */
-#define        in_idf(ch)      (inidf[(unsigned int)ch])
-#define        is_oct(ch)      (isoct[(unsigned int)ch])
-#define        is_dig(ch)      (isdig[(unsigned int)ch])
-#define        is_hex(ch)      (ishex[(unsigned int)ch])
-#define        is_wsp(ch)      (iswsp[(unsigned int)ch])
+#define        in_idf(ch)      (inidf[(unsigned char)ch])
+#define        is_oct(ch)      (isoct[(unsigned char)ch])
+#define        is_dig(ch)      (isdig[(unsigned char)ch])
+#define        is_hex(ch)      (ishex[(unsigned char)ch])
+#define        is_wsp(ch)      (iswsp[(unsigned char)ch])
 
 extern char tkclass[];
 extern char inidf[], isoct[], isdig[], ishex[], iswsp[];