From c59eae1429060bd5cb3191f1371d20e82b6be0f6 Mon Sep 17 00:00:00 2001 From: David Given Date: Mon, 11 Mar 2019 13:50:30 +0000 Subject: [PATCH] Don't buffer overflow when trying to process source bytes with the high bit set. --- lang/cem/cpp.ansi/class.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lang/cem/cpp.ansi/class.h b/lang/cem/cpp.ansi/class.h index 5046ddfdf..4ae5e2560 100644 --- a/lang/cem/cpp.ansi/class.h +++ b/lang/cem/cpp.ansi/class.h @@ -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 @@ -37,11 +37,11 @@ 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[];