2011-03-23 Paul Eggert <eggert@cs.ucla.edu>
+ * chartab.c (sub_char_table_ref_and_range): Redo to avoid overflow
+ concerns.
+
* term.c (produce_glyphless_glyph): Remove unnecessary test.
* cm.c (calccost): Turn while-do into do-while, for clarity.
struct Lisp_Sub_Char_Table *tbl = XSUB_CHAR_TABLE (table);
int depth = XINT (tbl->depth);
int min_char = XINT (tbl->min_char);
- int max_char = min_char + chartab_chars[depth - 1] - 1;
+ int char_offset_lim = chartab_chars[depth - 1];
int chartab_idx = CHARTAB_IDX (c, depth, min_char), idx;
Lisp_Object val;
break;
}
}
- while ((c = min_char + (chartab_idx + 1) * chartab_chars[depth]) <= max_char
- && *to >= c)
+
+ while ((c = (chartab_idx + 1) * chartab_chars[depth]) < char_offset_lim
+ && (c += min_char) <= *to)
{
Lisp_Object this_val;