From: Paul Eggert Date: Wed, 23 Mar 2011 08:13:33 +0000 (-0700) Subject: * chartab.c (sub_char_table_ref_and_range): Redo to avoid overflow X-Git-Tag: emacs-pretest-24.0.90~104^2~275^2~460^2~15^2~4 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=6ae5284811ba17222b14424a5fd71005c14ae131;p=emacs.git * chartab.c (sub_char_table_ref_and_range): Redo to avoid overflow concerns. --- diff --git a/src/ChangeLog b/src/ChangeLog index 47d9dbe5aa2..b2686811875 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,8 @@ 2011-03-23 Paul Eggert + * 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. diff --git a/src/chartab.c b/src/chartab.c index 85aa5932ac3..9a140eb8560 100644 --- a/src/chartab.c +++ b/src/chartab.c @@ -215,7 +215,7 @@ sub_char_table_ref_and_range (Lisp_Object table, int c, int *from, int *to, Lisp 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; @@ -244,8 +244,9 @@ sub_char_table_ref_and_range (Lisp_Object table, int c, int *from, int *to, Lisp 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;