]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix bidi_explicit_dir_char undefined behavior
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 9 Feb 2015 02:14:14 +0000 (18:14 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 9 Feb 2015 02:14:41 +0000 (18:14 -0800)
* bidi.c (bidi_explicit_dir_char): Avoid subscript error when
argument is BIDI_EOB.  This can happen in bidi_level_of_next_char.

src/ChangeLog
src/bidi.c

index 017b8f15e3b6477da505bd238c554c29c0af3991..3b2c9a6777fa4677b019a249908c3f3d04afd6ea 100644 (file)
@@ -1,5 +1,9 @@
 2015-02-09  Paul Eggert  <eggert@cs.ucla.edu>
 
+       Fix bidi_explicit_dir_char undefined behavior
+       * bidi.c (bidi_explicit_dir_char): Avoid subscript error when
+       argument is BIDI_EOB.  This can happen in bidi_level_of_next_char.
+
        Better distinguish infinite from invalid times
        * editfns.c (check_time_validity): New function.
        (decode_time_components): Return int, not bool.
index cbc1820c2a5dfe3d67b5a4dca11dc0445540b49f..e5e08c6a25297cd39326d02306e7fe6b14d7aa79 100644 (file)
@@ -1799,6 +1799,11 @@ bidi_explicit_dir_char (int ch)
 
   if (!bidi_initialized)
     emacs_abort ();
+  if (ch < 0)
+    {
+      eassert (ch == BIDI_EOB);
+      return false;
+    }
   ch_type = (bidi_type_t) XINT (CHAR_TABLE_REF (bidi_type_table, ch));
   return (ch_type == LRE || ch_type == LRO
          || ch_type == RLE || ch_type == RLO