From: Eli Zaretskii Date: Sat, 17 Apr 2010 13:34:23 +0000 (+0300) Subject: Fix a crash when an NSM character is inserted at BEGV. X-Git-Tag: emacs-pretest-24.0.90~104^2~275^2~438^2~491 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ebb5722ecf7eb9dc5dede02fa271e5dbdc8fc9ee;p=emacs.git Fix a crash when an NSM character is inserted at BEGV. bidi.c (bidi_init_it): Fix initialization of bidi_it->prev. (bidi_resolve_weak): Don't use prev.type_after_w1 if it is NEUTRAL_B or UNKNOWN_BT. --- diff --git a/src/ChangeLog b/src/ChangeLog index d1e22c730c7..4a388d29570 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2010-04-17 Eli Zaretskii + + Fix a crash when an NSM character is inserted at BEGV. + + * bidi.c (bidi_init_it): Fix initialization of bidi_it->prev. + (bidi_resolve_weak): Don't use prev.type_after_w1 if it is + NEUTRAL_B or UNKNOWN_BT. + 2010-04-16 Eli Zaretskii * xdisp.c (set_cursor_from_row): Don't consider possibility of diff --git a/src/bidi.c b/src/bidi.c index 0c8a3182510..d637ee0eeb5 100644 --- a/src/bidi.c +++ b/src/bidi.c @@ -976,10 +976,11 @@ bidi_init_it (EMACS_INT charpos, EMACS_INT bytepos, struct bidi_it *bidi_it) bidi_it->new_paragraph = 1; bidi_it->separator_limit = -1; bidi_it->type = NEUTRAL_B; - bidi_it->type_after_w1 = UNKNOWN_BT; - bidi_it->orig_type = UNKNOWN_BT; + bidi_it->type_after_w1 = NEUTRAL_B; + bidi_it->orig_type = NEUTRAL_B; bidi_it->prev_was_pdf = 0; - bidi_it->prev.type = bidi_it->prev.type_after_w1 = UNKNOWN_BT; + bidi_it->prev.type = bidi_it->prev.type_after_w1 = + bidi_it->prev.orig_type = UNKNOWN_BT; bidi_it->last_strong.type = bidi_it->last_strong.type_after_w1 = bidi_it->last_strong.orig_type = UNKNOWN_BT; bidi_it->next_for_neutral.charpos = -1; @@ -1353,7 +1354,9 @@ bidi_resolve_weak (struct bidi_it *bidi_it) current level run, and thus not relevant to this NSM. This is why NSM gets the type_after_w1 of the previous character. */ - if (bidi_it->prev.type != UNKNOWN_BT) + if (bidi_it->prev.type_after_w1 != UNKNOWN_BT + /* if type_after_w1 is NEUTRAL_B, this NSM is at sor */ + && bidi_it->prev.type_after_w1 != NEUTRAL_B) type = bidi_it->prev.type_after_w1; else if (bidi_it->sor == R2L) type = STRONG_R;