changeset 107806:ba0339bda073

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.
author Eli Zaretskii <eliz@gnu.org>
date Thu, 08 Apr 2010 20:35:10 +0300
parents bcbdb43a80e2
children 2311789d4888
files src/ChangeLog src/bidi.c
diffstat 2 files changed, 12 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- 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  <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.
--- 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)