* lib/gen-uni-tables.c (output_category, output_bidi_category) (output_joining_type, output_ident_category): Check out-of-range values added to 3-level tables. --- lib/gen-uni-tables.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
diff --git a/lib/gen-uni-tables.c b/lib/gen-uni-tables.c index 6a84503..7a273fc 100644 --- a/lib/gen-uni-tables.c +++ b/lib/gen-uni-tables.c @@ -1035,6 +1035,9 @@ output_category (const char *filename, const char *version) for (log2_value = 0; value > 1; value >>= 1, log2_value++); + if (log2_value > 0x1f) + abort (); + category_table_add (&t, ch, log2_value); } @@ -1525,6 +1528,9 @@ output_bidi_category (const char *filename, const char *version) { int value = get_bidi_category (ch); + if (value > 0x1f) + abort (); + bidi_category_table_add (&t, ch, value); } @@ -3993,6 +3999,9 @@ output_joining_type (const char *filename, const char *version) { uint8_t value = unicode_joining_type[ch]; + if (value != (uint8_t)~(uint8_t)0 && value > 0x0f) + abort (); + joining_type_table_add (&t, ch, value); } @@ -5137,6 +5146,10 @@ output_ident_category (const char *filename, int (*predicate) (unsigned int), co for (ch = 0; ch < 0x110000; ch++) { int syntaxcode = predicate (ch); + + if (syntaxcode > 0x03) + abort (); + if (syntaxcode != UC_IDENTIFIER_INVALID) identsyntax_table_add (&t, ch, syntaxcode); } -- 1.9.3