]> code.delx.au - gnu-emacs/commitdiff
Fix crash due to incorrect resolution of type of NSM characters (bug#5858).
authorEli Zaretskii <eliz@gnu.org>
Thu, 8 Apr 2010 17:35:10 +0000 (20:35 +0300)
committerEli Zaretskii <eliz@gnu.org>
Thu, 8 Apr 2010 17:35:10 +0000 (20:35 +0300)
 bidi.c (bidi_resolve_weak): Use prev.type_after_w1, instead of
 prev.orig_type, for resolving type of NSM.

src/ChangeLog
src/bidi.c

index 51ed028b9d5ec4af53d849a056738f54f9c076ac..ba7687d7841008f60616d84e930dafa21290e6c6 100644 (file)
@@ -1,3 +1,8 @@
+2010-04-08  Eli Zaretskii  <eliz@gnu.org>
+
+       * 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  <jan.h.d@swipnet.se>
 
        * xsettings.c (current_font, SYSTEM_FONT, XSETTINGS_FONT_NAME): New.
index 7da8cd4a88cb4134cd8587ca79b348cf83088dc2..0c8a3182510a084282f5a6606d6b5aa4b26fb637 100644 (file)
@@ -1347,12 +1347,14 @@ bidi_resolve_weak (struct bidi_it *bidi_it)
       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)