# HG changeset patch # User Eli Zaretskii # Date 1270748110 -10800 # Node ID ba0339bda07379432dee6c584507dd98ea422259 # Parent bcbdb43a80e2ba55f8cb2a9abfd4e9b8cff3655c Fix crash due to incorrect resolution of type of NSM characters (bug#5858). bidi.c (bidi_resolve_weak): Use prev.type_after_w1, instead of prev.orig_type, for resolving type of NSM. diff -r bcbdb43a80e2 -r ba0339bda073 src/ChangeLog --- a/src/ChangeLog Thu Apr 08 18:21:25 2010 +0200 +++ b/src/ChangeLog Thu Apr 08 20:35:10 2010 +0300 @@ -1,3 +1,8 @@ +2010-04-08 Eli Zaretskii + + * bidi.c (bidi_resolve_weak): Use prev.type_after_w1, instead of + prev.orig_type, for resolving type of NSM. (Bug#5858) + 2010-04-08 Jan Djärv * xsettings.c (current_font, SYSTEM_FONT, XSETTINGS_FONT_NAME): New. diff -r bcbdb43a80e2 -r ba0339bda073 src/bidi.c --- a/src/bidi.c Thu Apr 08 18:21:25 2010 +0200 +++ b/src/bidi.c Thu Apr 08 20:35:10 2010 +0300 @@ -1347,12 +1347,14 @@ if (type == WEAK_NSM) /* W1 */ { /* Note that we don't need to consider the case where the - prev character has its type overridden by an RLO or LRO: - such characters are outside the current level run, and - thus not relevant to this NSM. Thus, NSM gets the - orig_type of the previous character. */ + prev character has its type overridden by an RLO or LRO, + because then either the type of this NSM would have been + also overridden, or the previous character is outside the + 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) - type = bidi_it->prev.orig_type; + type = bidi_it->prev.type_after_w1; else if (bidi_it->sor == R2L) type = STRONG_R; else if (bidi_it->sor == L2R)