Mercurial > emacs
changeset 107774:291efac2eff3
Fix infloop in bidi buffers with vertical cursor motion at ZV.
bidi.c (bidi_resolve_explicit, bidi_level_of_next_char): Check
bidi_it->bytepos against ZV_BYTE instead of bidi_it->ch against
BIDI_EOB.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Sat, 03 Apr 2010 16:43:23 +0300 |
parents | ac009f6ace05 |
children | d0d89fd7a351 |
files | src/ChangeLog src/bidi.c |
diffstat | 2 files changed, 6 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Sat Apr 03 12:09:56 2010 +0300 +++ b/src/ChangeLog Sat Apr 03 16:43:23 2010 +0300 @@ -1,5 +1,9 @@ 2010-04-03 Eli Zaretskii <eliz@gnu.org> + * bidi.c (bidi_resolve_explicit, bidi_level_of_next_char): Check + bidi_it->bytepos against ZV_BYTE instead of bidi_it->ch against + BIDI_EOB. Fixes infloop with vertical cursor motion at ZV. + * w32fns.c (x_create_tip_frame): Copy `parms' before we modify it in this function. (Bug#5703)
--- a/src/bidi.c Sat Apr 03 12:09:56 2010 +0300 +++ b/src/bidi.c Sat Apr 03 16:43:23 2010 +0300 @@ -1242,7 +1242,7 @@ if (prev_level < new_level && bidi_it->type == WEAK_BN && bidi_it->ignore_bn_limit == 0 /* only if not already known */ - && bidi_it->ch != BIDI_EOB /* not already at EOB */ + && bidi_it->bytepos < ZV_BYTE /* not already at EOB */ && bidi_explicit_dir_char (FETCH_CHAR (bidi_it->bytepos + bidi_it->ch_len))) { @@ -1648,7 +1648,7 @@ if (bidi_it->scan_dir == 1) { /* There's no sense in trying to advance if we hit end of text. */ - if (bidi_it->ch == BIDI_EOB) + if (bidi_it->bytepos >= ZV_BYTE) return bidi_it->resolved_level; /* Record the info about the previous character. */