Avoid bidi-related crashes in Cperl Mode.
authorEli Zaretskii <eliz@gnu.org>
Sun, 26 Jun 2011 17:23:40 +0000 (20:23 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sun, 26 Jun 2011 17:23:40 +0000 (20:23 +0300)
 src/bidi.c (bidi_paragraph_init): Test for ZV_BYTE before calling
 bidi_at_paragraph_end, since fast_looking_at doesn't like to be
 called at ZV.

src/ChangeLog
src/bidi.c

index 2c8b22d..1b395f8 100644 (file)
@@ -1,3 +1,9 @@
+2011-06-26  Eli Zaretskii  <eliz@gnu.org>
+
+       * bidi.c (bidi_paragraph_init): Test for ZV_BYTE before calling
+       bidi_at_paragraph_end, since fast_looking_at doesn't like to be
+       called at ZV.
+
 2011-06-26  Chong Yidong  <cyd@stupidchicken.com>
 
        * process.c (wait_reading_process_output): Bypass select if
index 1f3b196..469afdb 100644 (file)
@@ -744,8 +744,6 @@ bidi_paragraph_init (bidi_dir_t dir, struct bidi_it *bidi_it, int no_default_p)
                       || type == LRE || type == LRO));
             type = bidi_get_type (ch, NEUTRAL_DIR))
          {
-           if (type == NEUTRAL_B && bidi_at_paragraph_end (pos, bytepos) >= -1)
-             break;
            if (bytepos >= ZV_BYTE)
              {
                /* Pretend there's a paragraph separator at end of
@@ -753,6 +751,8 @@ bidi_paragraph_init (bidi_dir_t dir, struct bidi_it *bidi_it, int no_default_p)
                type = NEUTRAL_B;
                break;
              }
+           if (type == NEUTRAL_B && bidi_at_paragraph_end (pos, bytepos) >= -1)
+             break;
            /* Fetch next character and advance to get past it.  */
            ch = bidi_fetch_char (bytepos, pos, &disp_pos,
                                  bidi_it->frame_window_p, &ch_len, &nchars);