# HG changeset patch # User Eli Zaretskii # Date 1271511263 -10800 # Node ID 8b1a353e3aab73f4ea3e8ff637cacdbf5b6ff4d5 # Parent d177bcced7445cb424b041689b473d2100da8aee 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 -r d177bcced744 -r 8b1a353e3aab src/ChangeLog --- a/src/ChangeLog Fri Apr 16 21:52:12 2010 -0500 +++ b/src/ChangeLog Sat Apr 17 16:34:23 2010 +0300 @@ -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 -r d177bcced744 -r 8b1a353e3aab src/bidi.c --- a/src/bidi.c Fri Apr 16 21:52:12 2010 -0500 +++ b/src/bidi.c Sat Apr 17 16:34:23 2010 +0300 @@ -976,10 +976,11 @@ 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 @@ 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;